闲来无事,把之前用到的整理上来以备忘
SocketServer 类实现:
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class SocketServer extends Thread {
String tag = "服务器:";
String ip;
int port = 0;
ServerSocket serverSocket;
int countClient = 0;
private ArrayList<Socket> sockets = new ArrayList<>();
public static SocketServer getInstance(){
return SingleInstance.INSTANCE;
}
public static class SingleInstance{
private final static SocketServer INSTANCE = new SocketServer();
}
public SocketServer bindPort(int port){
this.port = port;
return this;
}
@Override
public void run() {
super.run();
Socket socket = null;
while (true){
try {
if(null==serverSocket||serverSocket.isClosed()){
System.out.println(tag+"开始绑定端口");
serverSocket = new ServerSocket(port);
}
System.out.println(tag+"等待客户端接入");
socket = serverSocket.accept();
ClientThread clientThread = new ClientThread(socket);
clientThread.start();
countClient++;
sockets.add(socket);
InetAddress inetAddress = socket.getInetAddress();
System.out.println(tag+"客户端数量:"+countClient+",当前连入客户端是:"+inetAddress.getHostAddress());
}catch (IOException e){
System.out.println(tag+"Server error:"+e.getCause());
}
}
}
public void publishOthers(Socket socket,String data){
for(Socket item:sockets){
if(item!=socket&&!item.isClosed()){
try {
System.out.println(tag+socket+"将数据"+data+"广播给"+item);
OutputStream outputStream = item.getOutputStream();
PrintWriter pw = new PrintWriter(outputStream);
pw.write(data);
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public class ClientThread extends Thread{<