同步多套接字客户端澄清

同步多套接字客户端澄清

问题描述:

我将创建多个同步客户端。我需要关于下面的代码的一些解释。 当我创建一个像下面这样的套接字并调用连接网络层发生的事情时。同步多套接字客户端澄清

我相信当我们创建一个套接字并调用connect时,TCP/IP连接将在客户套接字和服务器套接字之间建立一条隧道。

一旦此发件人(套接字)连接到服务器,该客户端&服务器之间将有一个唯一的隧道。 如果我创建另一个客户端,它将在它们之间有另一个唯一的隧道。

万一如果我们得到一个错误,客户端没有连接,总是我们应该使用现有的套接字(发送者)重新连接,那么我们将访问我们有相同的数据/连接。 我们不应该创建一个新的套接字,然后我们将有一个新的隧道,我们将丢失以前的连接和数据。

Socket sender = new Socket(AddressFamily.InterNetwork, 
           SocketType.Stream, ProtocolType.Tcp); 
sender.Connect(remoteEndpoint) 

请说明是否我错了。

你称之为隧道真的叫做连接。断开的连接不能恢复。数据丢失是可以预料的。

当您重新使用现有的套接字对象再次连接时,您正在创建一个新的连接。不推荐重复使用套接字对象(我自己),因为它很混乱。

请注意,TCP不知道套接字是什么。该规范不包含该词。套接字是操作系统级别的东西。

+0

我有几个问题。 1.我们应该尝试只在初始阶段失败时重新连接套接字(在创建套接字对象之后)2.我正在创建单独的套接字对象,以便在客户端使用不同的线程提供不同的请求。然后,服务器如何知道应该向哪个客户端发送数据。因为所有的客户端都有相同的端点。 – user3597233 2014-11-02 17:41:33

+0

我不明白你的意思是(1)。关于(2):只要保留对适当套接字对象的引用并在其上发送和接收即可。操作系统负责其余部分。 – usr 2014-11-02 17:54:31

+0

还有一个问题,所以我的(2)点是正确的,我应该为每个请求创建新的套接字。 – user3597233 2014-11-02 18:57:28