1. 程式人生 > >線程實現ServerSocket和Socket實現數據交互

線程實現ServerSocket和Socket實現數據交互

exc str nts while pub catch nds 具體實現 客戶端訪問

定義一個MyServer類


import java.io.IOException;
import java.net.ServerSocket;

public class MyServer {
public static void main(String[] args) {
try {
System.out.println("服務器啟動");
ServerSocket ss = new ServerSocket(80);
while (true) {
new MyThread(ss.accept()).start();//監聽到一次 開啟一個線程,省去很多資源,這裏很多人都會用死循環去實現循環監聽,很浪費資源。

}

} catch (IOException e) {
e.printStackTrace();
}
}
}

-----------------------------------

客戶端訪問服務器端的類


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class MyClient {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
try {
System.out.println("客戶端啟動");
Socket socket = new Socket("127.0.0.1", 80);//訪問本機,端口80
PrintWriter out = new PrintWriter(new OutputStreamWriter(
socket.getOutputStream()));//創建一個輸出流,手動輸入要轉換的字符串
out.println(sc.next());
out.flush();
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));//創建一個輸入流,接受服務器返回的數據
String sline = in.readLine();
System.out.println("從服務器端返回的數據是:" + sline);
} catch (IOException e) {
e.printStackTrace();
}

}
}

---------------------------------------------

線程類具體實現數據交互


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

public class MyThread extends Thread {

Socket socket;

public MyThread(Socket socket) {
this.socket = socket;
}

@Override
public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String sline = in.readLine();
System.out.println("從客戶端接受的數據是:" + sline);
PrintWriter pw = new PrintWriter(new OutputStreamWriter(
socket.getOutputStream()));
pw.println((sline==null)?"":sline.toUpperCase());
pw.flush();
System.out.println("服務器結束");

} catch (IOException e) {
e.printStackTrace();
}
}

}

線程實現ServerSocket和Socket實現數據交互