1. 程式人生 > >簡單TCP網路程式設計

簡單TCP網路程式設計

通訊過程

伺服器端: 1、 建立 ServerSocket 物件(並繫結埠) 2、 呼叫 accept 方法,等待來自客戶端的連線 3、 呼叫 getXXXStream 方法,進行 I/O 4、 關閉 Socket 客戶端: 1、 建立 Socket 物件,並連線伺服器 2、 呼叫 getXXXStream 方法,進行 I/O 3、 關閉 Socket 例子:客戶端向伺服器端傳送一個“hello”字串。服務端接受客戶端傳送的字串,在後面增加一個“ from server”字串,再返回給客戶端。 伺服器端程式碼: 伺服器端的步驟 建立 ServerSocket 物件(並繫結埠) while(true){ 呼叫 accept 方法 呼叫 getXXXStream 方法,進行 I/O 關閉 Socket } 利用多執行緒可以實現多使用者訪問,當一個使用者來,就開一個執行緒給他,不影響多使用者訪問的情況。

package chp17;
import java.io.*;
import java.net.*;
public class TCPServer {
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		//建立 ServerSocket 物件(並繫結埠)
		ServerSocket ss = new ServerSocket(9000);
		while(true){
		//呼叫 accept 方法
		Socket s = ss.accept();
		//建立新執行緒進行 I/O
Thread t = new ServerThread(s); t.start(); } } } class ServerThread extends Thread{ private Socket s; public ServerThread(Socket s) { this.s = s; } public void run(){ try{ BufferedReader br = new BufferedReader( new InputStreamReader(s.getInputStream()) ); String line =
br.readLine(); PrintWriter pw = new PrintWriter( s.getOutputStream()); pw.println(line + " from server"); pw.flush(); } catch (IOException e) { e.printStackTrace(); }finally{ try { s.close(); } catch (IOException e) { e.printStackTrace(); } } } }

客戶端程式碼:

package chp17;
import java.io.*;
import java.net.*;
public class TCPClient {
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		//建立 Socket 物件(並連線伺服器)
		Socket s = new Socket("10.249.151.86", 9000);
		//呼叫 getXXXStream 方法,進行 I/O
		PrintWriter pw = new PrintWriter(s.getOutputStream());
		pw.println("hello world");
		pw.flush();
		BufferedReader br = new BufferedReader(
		new InputStreamReader(s.getInputStream())
		);
		String line = br.readLine();
		System.out.println(line);
		//關閉 Socket
		s.close();
	}

}