gpt4 book ai didi

java - ServerSocket - 如何保留客户端套接字 ID

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:33 24 4
gpt4 key购买 nike

我尝试将 Socket 对象扩展为...

public class TestSocket extends Socket
{
private String id=String.valueOf(Math.random());

...

public void setId(String id){this.id=id;}
public String getId(){return this.id;}

}

初始化为...

TestSocket testSocket = new TestSocket(SERVER_HOSTNAME, SERVER_PORT);

正如我所见,服务器端ServerSocket标准代码就像一个

TestSocket mySocket = (TestSocket) serverSocket.accept();

...根据docs accept() 方法重新初始化套接字对象并返回一个新的,因此 id 值不是客户端的,而是重新生成的:(

是否可以保留客户端 ID?如果是的话怎么办?

最佳答案

我猜是这条线

TestSocket mySocket = (TestSocket) serverSocket.accept();

会引发ClassCastException,因为java.io.ServerSocket.accept()返回类Socket的实例,而不是TestSocket(除非您从ServerSocket继承)。

如果您想连接两个套接字,您可能必须通过连接发送 ID 并在接收端设置它,例如:

public void sendID() {
DataOutputStreak dos = new DataOutputStream(getOuputStream());
dos.writeUTF(this.getId());
}

public void receiveID() {
DataInputStream dis = new DataInputStream(getInputStream());
setId(dis.readUTF());
}

两个测试套接字之一将调用一个方法,另一个将调用另一个方法。但是,我不会继承 Socket 类来执行此操作,而是在更高级别上处理此操作。

关于java - ServerSocket - 如何保留客户端套接字 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11145310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com