服务器端与客户端TCP连接入门(三:多线程)

时间:2022-12-15 09:56:30

对于服务器端来说,如果要加入多线程机制,则应该在每个用户连接之后启动一个新的线程

建立一个EchoThread类,此类专门用于处理多线程操作,此时的多线程使用Runnable接口实现

package Socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
/**
* 接收每一个客户端的Socket,并通过循环的方式接收客户端的输入信息及向客户端输出信息
*/
public class EchoThread implements Runnable { private Socket client=null;      //接收客户端
public EchoThread(Socket client){ //通过构造方法设置Socket
this.client=client;
} public void run() {
PrintStream out=null;
BufferedReader buf=null; try {
buf=new BufferedReader(new InputStreamReader(client.getInputStream()));//得到客户端输入信息
out=new PrintStream(client.getOutputStream());//实例化客户端的输出流
boolean flag=true;
while(flag){ //客户端循环操作
String str=buf.readLine();//不断接收信息
if(str==null||"".equals(str)){
flag=false;
}
else{
if("bye".equals(str)){ //如果输入bye,结束操作
flag=false;
}
else{
out.println("ECHO:"+str);//向客户端回显信息
}
}
}
out.close();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

是是

package Socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 在服务器端,每一个连接到服务器的客户端Socket都会以一个线程的方式运行,
* 这样,无论有多少个客户端连接都可以同时完成操作
*/
public class EchoThreadServer { public static void main(String[] args) throws Exception {
ServerSocket server =null;//定义ServerSocket对象
Socket client=null;//定义socket对象,表示客户端 server = new ServerSocket();//此服务器在8888端口进行监听
boolean f=true;
while(f){
System.out.println("服务器运行,等待客户端连接。");
client=server.accept();
new Thread(new EchoThread(client)).start();//实例化并启动一个线程对象
}
server.close();
} }