一、ServerSocket
1.为了方便调试,先创建一个界面用于显示客户端连接信息
基于javafx包写的一个简单界面!
javafx.scene.control.TextArea ta = new javafx.scene.control.TextArea();
@Override
public void start(Stage primaryStage) throws Exception {
scene = new Scene(ta,450,200);
primaryStage.setTitle("SocketServer");
primaryStage.setScene(scene);
primaryStage.show();
pStage = primaryStage;
new Thread(new MyServer()).start(); //创建线程启动Socket服务
}
2.启动Socket服务
public class MyServer implements Runnable{
@Override
public void run() {
try{
java.net.ServerSocket serverSocket = new java.net.ServerSocket(8000);
ta.appendText("Server started at " + new Date()+"\n");
while(true){
Socket socket = serverSocket.accept(); //程序会在这里阻塞,直到等到客户端连接
clientNumber++;
/*
这里就是在界面中输出一些服务器、和连接的客户端信息
*/
Platform.runLater(()->{
ta.appendText("Starting thread for client " + clientNumber + " at " +
new Date() +"\n");
InetAddress inetAddress = socket.getInetAddress();
ta.appendText("Client "+clientNumber + "'s host name is" +inetAddress.getHostName()
+"\n");
ta.appendText("Client"+clientNumber + "'s IP address is "+ inetAddress.getHostAddress()+"\n");
});
/*
每有一个客户端连接服务器就创建一个线程,进行通信处理
*/
new Thread(new HandleServer(socket)).start();
try{
Thread.sleep(100); //多个客户端连续快速连接服务器时,可能出现问题,这里设置延时
}catch (InterruptedException e){ </