我对在java中创建网络连接完全陌生,所以如果这是一个愚蠢的问题我会道歉。
我正在尝试在java中创建一个D& D伴侣,允许玩家创建他们的角色,然后将其发送到DM,以便他们可以查看并进行更改并将其发送回播放器。我希望能够做到这一点,以便任何时候在一台计算机上更改字段,它也将在另一台计算机上更改。
经过一系列在线研究之后,我已经能够在DM(服务器)和播放器(客户端)之间创建套接字连接,并在两者之间传递消息,但我不确定套接字连接是如何工作的连接。我的研究还不是很清楚。我发现很多资源都说java在传递消息后关闭套接字,而且许多资源都说套接字保持打开状态。
如果java关闭套接字然后我的问题很容易解决,因为每次我需要传递数据时我只需要打开一个新的套接字,确保我第一次将客户端的IP地址传递给服务器我建立联系的时间。
当套接字保持打开状态时,我会遇到真正的问题。
如果套接字保持打开状态且多个客户端连接到服务器,那么只要服务器发送消息,服务器就会通过网络大喊一声,以便所有客户端都能收到消息? (如果是这种情况,那么我知道我可以在消息的前面附加一个用户名,以便客户端可以确定服务器是否正在与之通话。)
如果服务器没有喊叫,那么如何指定我希望服务器与哪个客户端通话?
我是否必须在接收方法中添加一个循环,以便客户端/服务器不断监听来自服务器/客户端的传输,或者在我第一次运行该方法后java会自动执行此操作吗?
答案 0 :(得分:1)
我发现很多资源都说java在传递消息后关闭套接字
你找到了他们的位置?
许多人说插座保持打开状态。
所有这些都是正确的。 Java永远不会关闭连接。该应用程序关闭连接。
如果java关闭套接字然后我的问题很容易解决,因为每次我需要传递数据时我只需要打开一个新的套接字,确保我第一次将客户端的IP地址传递给服务器我建立联系的时间。
没有。
当套接字保持打开状态时,我会遇到真正的问题。
如果套接字保持打开状态且多个客户端连接到服务器,那么只要服务器发送消息以便所有客户端都收到消息,服务器是否会通过网络大喊一声?
没有。它将通过连接到相应客户端的套接字进行响应。
(如果是这种情况,那么我知道我可以将一个用户名附加到邮件的前面,以便客户端可以确定服务器是否正在与它通信。)
不必要的。
如果服务器没有喊叫,那么如何指定我希望服务器与哪个客户端通话?
服务器通过同一个套接字响应它从中读取请求。
我是否必须在接收方法中添加一个循环,以便客户端/服务器不断监听来自服务器/客户端的传输
不,你必须为每个被接受的套接字添加一个线程,它会循环读取请求直到流结束。
或者我第一次运行该方法后会自动执行此操作吗?
没有
你似乎一直在阅读一些真正令人震惊的传闻。请查看Java Tutorial的Custom Networking部分。
答案 1 :(得分:0)
加入EJP的明智答案,可能值得澄清一下: