多线程的服务器可同时处理多个客户端
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import copsec.thread.Servers;
public class JTester {
public static void main(String[] args) {
try{
ServerSocket server=new ServerSocket();
Socket client=null;
server.setReuseAddress(true);
server.bind(new InetSocketAddress("127.0.0.1",8888 ));//这样避免了未定义IP导致,服务器安全问题,有可能会泄露“0.0.0.0:8888”端口
boolean f= true;
while(f){
client=server.accept();//新建连接一次会开一个新的线程去处理它
Servers sv=new Servers(client);
new Thread(sv).start();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
服务器处理线程
/**
*
* @Description: 服务器处理线程
*
*/
public class Servers implements Runnable {
Socket client = null;
BufferedReader br = null;
public PrintStream pw = null;
Scanner s = null; // 用于接收输入流,并使用"\n\n"来分割输入字段
public Servers(Socket client) {
this.client = client;
}
public void run() {
boolean flag=true;
while(flag){
try{
br = new BufferedReader(new InputStreamReader(client
.getInputStream()));//接收信息
s = new Scanner(br);//用于将接受的流数据按照自己的要求来分割处理
s.useDelimiter("\\\\n\\\\n");//可以分割客户端发来的信息比如“user zhangsan\n\n pass lisi\n\n”;当然括号里还可以填正则表达式
pw = new PrintStream(client.getOutputStream());
while(s.hasNext()){
System.out.print(s.next());
pw.print("Hello World\n\n");//回传给客户端的信息
}
}catch(Exception e){
e.printStackTrace();
}
}}
}