首页 > 解决方案 > 服务器和客户端之间的套接字对象不同

问题描述

有什么方法可以检查服务器端和客户端之间是否使用了相同的 Socket?

  1. 创建 DateServer.java 和 DateClient.java
  2. 运行 DateServer.java
  3. 运行 DateClient.java
  4. 检查控制台上的两个 hashCode。hashCode 不同。我以为是一样的。
package net;
    
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;

public class DateServer {
    
    public static final int LISTENING_PORT = 32007;
    
    public static void main(String[] args) {
        ServerSocket listener;
        Socket connection;
        try {
            listener = new ServerSocket(LISTENING_PORT);
    
            while (true) {
                connection = listener.accept();
                System.out.println(connection.hashCode());
                
                sendDate(connection);
            }
        } catch (Exception e) {
            return;
        }
    }
    
    private static void sendDate(Socket client) {
        try {
            Date now = new Date();
            PrintWriter outgoing = new PrintWriter(client.getOutputStream());
            outgoing.println(now.toString());
            outgoing.flush();
            client.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}
package net;
    
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
    
public class DateClient {
    
    public static final int LISTENING_PORT = 32007;
    
    public static void main(String[] args) {
    
        String hostName = "localhost";
        Socket connection;
        BufferedReader incoming;
    
        try {
            connection = new Socket(hostName, LISTENING_PORT);
            System.out.println(connection.hashCode());
                
            incoming = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String lineFromServer = incoming.readLine();
            System.out.println();
            System.out.println(lineFromServer);
            System.out.println();
            incoming.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

标签: javasockets

解决方案


hashCode 不同。我以为是一样的

这个假设是错误的。而且我不知道它来自哪里。但hashCode只返回与本地对象关联的本地标识符。


推荐阅读