我目前正在编写客户端 - 服务器应用程序。客户端发送一个UDP广播消息,试图定位一个服务器,服务器发送一个UDP广播消息来标识其位置。使用TCP c将数据包从服务器发送到特定客户端#
当客户端收到标识服务器位置的消息时,它会尝试使用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中使用。 – J3soon
我只使用UDP来避免在服务器端使用如此多的资源,因为UDP无限期地广播服务器位置不是一个好主意。我知道连接正常,并且服务器处于打开状态,因为我可以在客户端和服务器端看到它(消息出现在GUI上,表示客户端已连接),并且服务器是否关闭消息出现在客户端。我试图发送使用*** TCPSocket.SendTo(message,clientsArray [i] .theirSocket.RemoteEndPoint); ***这是完全相同的,但我得到的错误。 – JOsh
我说'SendTo'函数用在** UDP Only **中,所以你只能在我的答案中使用'Send'函数作为使用TCP **的** Socket。你可以完全忘记'SendTo'函数,因为你正在使用TCP。 – J3soon