【1】服務器端 ServerSocket:
編寫TCP網絡服務程序,首先要用到java.net.ServerSocket類用以創建服務器Socket.它的常用構造方法有:
1, ServerSocket(int port):創建綁定到特定端口的服務器套接字。
2, ServerSocket(int port, int backlog):利用指定的backlog(服務器忙時保持連接請求的等待客戶數量),創建服務器套接字并將其綁定到指定的本地端口號。
3, ServerSocket(int port, int backlog, InetAddress bindAddr):使用指定的端口、偵聽 backlog 和要綁定到的本地 IP 地址創建服務器。
【2】客戶端 Socket:
客戶端要與服務器建立連接,必須先創建一個Socket對象,它的常用構造方法有:
1,Socket(String host, int port):創建一個流套接字并將其連接到指定主機上的指定端口號。
2,Socket(InetAddress address, int port):創建一個流套接字并將其連接到指定 IP 地址的指定端口號。
3,Socket(InetAddress address, int port, InetAddress localAddr, int localPort):創建一個套接字并將其連接到指定遠程端口上的指定遠程地址。
4,Socket(String host, int port, InetAddress localAddr, int localPort):創建一個套接字并將其連接到指定遠程主機上的指定遠程端口。
對于通常情況的應用,使用第1個構造方法來創建客戶端的Socket對象,并與服務器建立連接,是非常簡單和方便的.
服務器端程序調用ServerSocket.accept方法等待客戶端的連接請求,一旦accept接收了客戶端連接請求,該方法返回一個與該客戶端建立了專線連接的Socket對象,不用程序去創建這個Socket對象.建立了連接的兩個Socket是以IO流的方式進行數據交換的,Java提供了Socket.getInputStream返回Socket的輸入流對象,Socket.getOutputStream返回Socket的輸出流對象.
【3】服務器端代碼
package com.farsight.bj15091;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServerDemon {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(10000);
System.out.println("服務器啟動....");
Socket s = server.accept();
System.out.println("客戶端連接成功...");
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = null;
while(true){
line = br.readLine();
System.out.println("客戶端消息:" + line);
if(line.equals("quit")){
break;
}
}
br.close();
s.close();
server.close();
}
}
【4】客戶端代碼
package com.farsight.bj15091;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class TcpClientDemon {
public static void main(String[] args) throws IOException {
Socket s = new Socket("192.168.4.251", 10000);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line = null;
System.out.print("請輸入:");
while((line = br.readLine()) != null){
bw.write(line);
bw.newLine();
bw.flush();
if(line.equals("quit")){
break;
}
}
br.close();
bw.close();
s.close();
}
}