TCP套接字
Java為TCP協議提供了兩個類:Socket類和ServerSocket類。一個Socket實例代表了TCP連接的一端。一個TCP連接是一條抽象的雙向信道,兩端分別由IP地址和端口號確定。
TCP客戶端
典型的TCP客戶端要經過下面三步:
1.創建一個Scoket實例:構造函數向指定的遠程主機和端口建立一個TCP連接。
2.通過套接字的輸入輸出流(I/O streams)進行通信:一個Scoket連接實例包括一個InputStream和一個OutputStream,它們的用法同於其他Java輸入輸出流。
3.使用Scoket類的close()方法關閉連接。
TCP服務器端
1.創建一個ServerSocket實例,並指定本地端口。此逃接字的功能是偵聽該指定端口收到的連接。
2.重復執行:
a.調用ServerSocket的accept()方法以獲取下一個客戶端連接,基於新建立的客戶端連接,創建一個Socket實例,並由accept()方法返回。
b.使用所返回的Socket實例的InputStream和OutputStream與客戶端進行通信。
c.通信完成後,使用Socket類的Close()方法關閉該客戶端套接字連接。
下面程序示例:
TcpServer.java
package com.iboxpay.tcp;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) throws IOException {
BufferedReader buffer = null;
ServerSocket server= null;
Socket s = null;
InputStream is = null;
OutputStream os = null;
DataOutputStream dos = null;
try {
server = new ServerSocket(8080);
s = server.accept();
is = s.getInputStream();
os = s.getOutputStream();
System.out.println("-----------welcome to tcp socket-------");
buffer = new BufferedReader(new InputStreamReader(is));
dos = new DataOutputStream(os);
System.out.println(buffer.readLine());//輸出
} catch (IOException e) {
e.printStackTrace();
}finally{
buffer.close();
os.close();
is.close();
s.close();
server.close();
}
}
}
TcpClient.java
package com.iboxpay.tcp;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class TcpClient{
public static void main(String[] args) {
String[] str = {"172.30.5.58","8080"};
try {
client(str);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void client(String[] str) throws IOException{
Socket s = null;
InputStream ips = null;
OutputStream ops = null;
BufferedReader brKey = null;
DataOutputStream dos = null;
BufferedReader brNet = null;
try
{
//Socket s=new Socket(InetAddress.getByName("192.168.0.213"),8001);
if(str.length < 2)
{
System.out.println("Usage:java TcpClient ServerIP ServerPort");
return;
}
//建立Socket
s =new Socket(InetAddress.getByName(str[0]),Integer.parseInt(str[1]));
ips =s.getInputStream();
ops =s.getOutputStream();
dos = new DataOutputStream(ops);
brNet = new BufferedReader(new InputStreamReader(ips));
while(true)
{
brKey = new BufferedReader(new InputStreamReader(System.in));//鍵盤輸入
String strWord = brKey.readLine();
dos.writeBytes(strWord + System.getProperty("line.separator"));
if(strWord.equalsIgnoreCase("quit"))
break;
}
}catch(Exception e){
e.printStackTrace();
} finally{
dos.close();
brNet.close();
brKey.close();
s.close();
}
}
}