簡單TCP網路程式設計
阿新 • • 發佈:2018-12-21
通訊過程
伺服器端: 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();
}
}