TCP加入多线程:
每一个客户端使用一个线程的对象进行表示。
完成线程的操作类:
package ScoketDemo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class EchoThread implements Runnable {
private Socket client;
public Socket getClient() {
return client;
}
public void setClient(Socket client) {
this.client = client;
}
public EchoThread(Socket client) {
super();
this.client = client;
}
@Override
public void run() {
try {
BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintStream print = new PrintStream(client.getOutputStream());
boolean temp = true;
while(temp){
String str = buf.readLine();
if(str == null||"".equals(str)){
temp = false;
break;
}
if("exit".equals(str)){
temp = false;
break;
}
print.println("ECHO:"+str);
}
print.close();
client.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
以上是将服务端与客户端进行交换的代码独立出来放进一个线程类,那么只要每次在有一个客户端连上服务端的时候,就开启一个以上的线程类就行了。
package ScoketDemo;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class EchoServer {
public static void main(String[] args) {
ServerSocket server=null;
Socket client = null;
try {
server = new ServerSocket(8888);
boolean flag = true;
while(flag){
System.out.println("等待客户端连接");
client = server.accept();
new Thread(new EchoThread(client)).start();
}
server.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}