【发布时间】:2016-03-17 11:22:40
【问题描述】:
我目前正在编写一个客户端-服务器应用程序。客户端发送 UDP 广播消息尝试定位服务器,服务器发送 UDP 广播消息标识其位置。
当客户端收到标识服务器位置的消息时,它会尝试使用 socket.Connect(remoteEndPoint) 连接到服务器。
服务器在侦听套接字上侦听这些 TCP 请求,并使用 listensocket.accept() 接受请求。客户端详细信息存储在数组中(包括它们的 IP 和端口号)
客户端向服务器发送一条消息,其中包含有关用户输入的用户名和密码的信息。
服务器检查数据库中的用户名和密码,并根据结果向发送请求的客户端发送 TCP 消息(这是中断的地方),以使用侦听套接字检查 U&P。我正在尝试使用以下代码发送 TCP 消息,但由于出现错误,它无法正常工作。
TCPSocket.SendTo(message, clientsArray[i].theirSocket.RemoteEndPoint);
【问题讨论】:
-
可以直接调用
Socket.Connect(remoteEndPoint)捕获异常,查看服务器是否开启。通过这种方式,它会更简单。按照我说的做,您可以完全删除代码中 UDP 的存在。您可以通过clientsArray[i].theirSocket.Send(msg);发送给连接的客户端。由于SendTo仅用于 UDP。 -
我只使用 UDP 来避免在服务器端使用如此多的资源,因为 UDP 无限期地广播服务器位置并不是一个好主意。我知道连接正常并且服务器已打开,因为我可以在客户端和服务器端看到它(消息出现在 GUI 上,说明客户端已连接),如果服务器关闭,客户端会出现一条消息。我正在尝试使用 TCPSocket.SendTo(message, clientsArray[i].theirSocket.RemoteEndPoint); 发送,这与您的完全相同,但我收到了错误。
-
我说
SendTo函数在UDP Only中使用,所以你应该只在Socket using TCP中使用Send函数我的答案。您可以完全忘记SendTo函数,因为您使用的是 TCP。 -
感谢邮件发送成功。抱歉,我没有在您的回复中发现 send 而不是 sendTo 。你真的很有帮助。
标签: c# tcp server client endpoint