2010-11-20 106 views
1

一个进程可以并行打开/维护2个TCP连接吗? [用于发送和接收]。 我尝试以下情形:C中的多个TCP连接

1)客户端连接到服务器的一个端口上,说13101.

2)一旦发出,它会等待另一个端口13102上拿到ACK。

3)在这里服务器可以处理多个连接[在同一端口号上使用select()]。

现在,我面临两个问题: 1)服务器从客户端1接收数据,它正在处理数据并发回ACK [给客户端1],我正在准备一个新的TCP连接[与端口13102]和试图发送数据。它以“拒绝连接”失败。

2)为了验证上述问题,我编写了另一个client2程序,它只是将数据发送到端口13102 [在client1处于监听模式时]。仍然client2得到“连接被拒绝”错误。

回答

1

是的,你可以打开很多插座!但是,您不应该需要单独的套接字来发送和接收,TCP套接字在打开时是双向的。 至于你的错误,如果你使用两台机器,可能会有防火墙阻止服务器连接到你的客户端。您可以尝试使用telnet尝试连接到同一个端口。

+0

Bret,Iam在同一台机器上运行客户端/服务器。是的,你说的是TCP/IP套接字是双向的。当我第一次遇到上述错误时,我更改为2个套接字。仍然错误仍然存​​在。 – 2010-11-20 10:25:51

+1

您需要发布一些源代码才能获得更多。连接被拒绝意味着或者没有任何绑定到有问题的端口,或者其他东西拒绝它(因此防火墙理论)。你确实要调用bind()吗? – 2010-11-20 10:34:18

0

该错误可能是因为客户端没有监听传入连接。如上所述,您可以使用单个套接字进行发送和接收。