線程實現ServerSocket和Socket實現數據交互
定義一個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實現數據交互