1.客户端的实现:使用IDEA的多开功能,运行多次客户端代码,模拟多用户访问服务端。
package allclass;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;
public class UserSocket {
public static void main(String[] args){
try {
//生成客户端,调用方法得到通信流管道,并将管道包装;
System.out.println("=======客户端启动成功======");
Socket User=new Socket("127.0.0.1",9999);
OutputStream temp=User.getOutputStream();
PrintStream out=new PrintStream(temp,true,"GBK");
//接受用户输入信息,并且循环发送;
Scanner Userin=new Scanner(System.in);
while(Userin.hasNext()){
String message=Userin.nextLine();
out.println(message);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.服务端的实现:服务端不对每个访问的客户端创建新的线程,而是使用线程池来节省线程创建,减少开销,自动排队处理。
package allclass;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.*;
public class ServerSocketText {
public static void main(String[] args) {
System.out.println("=======服务端启动成功======");
ExecutorService pool=new ThreadPoolExecutor(3,10,2, TimeUnit.HOURS,new ArrayBlockingQueue<>(5), Executors.defaultThreadFactory());
try {
ServerSocket server = new ServerSocket(9999);
while(true){
Socket User= server.accept();
ServerSocketThread sst=new ServerSocketThread(User);
pool.execute(sst);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.线程任务类的实现:线程任务类实现消息的接受,并打印。
package allclass;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class ServerSocketThread implements Runnable{
private Socket tmp;
public ServerSocketThread(Socket tmp) {
this.tmp = tmp;
}
@Override
public void run() {
try {
InputStream inputStream=tmp.getInputStream();
BufferedInputStream in =new BufferedInputStream(inputStream);
byte[] container=new byte[1024*64];
int len;
while ((len=in.read(container))>0){
System.out.print(tmp.getRemoteSocketAddress()+" : ");
System.out.print(new String(container,0,len));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
by:河师大小菜狗