Winsock recv在不同的线程

时间:2012-08-09 19:32:41

标签: delphi-7 winsock delphi

我使用winsock作为一个拥有大约10个线程的客户端。

每个线程都拥有与同一主机和端口的唯一连接。 所有线程都已连接,它们都需要读取一定量的字节 同时。我看到我一次只能使用1个recv函数,为什么会这样?

function RecvThread ( p : pointer ) : Integer; stdcall;
var
 Sock   : TSocket;
 Addr   : TSockAddrIn;
 res    : Integer;
begin
 Addr.sin_family      := AF_INET;
 Addr.sin_port        := htons(8080);
 Sock                 := Socket(AF_INET, SOCK_STREAM, 0);
 Addr.sin_addr.S_addr := INET_ADDR (pchar('localhost'));
 if (Connect(Sock, Addr, SizeOf(Addr)) = 0) then begin
 while true do begin
  res := recv (sock, buff, 99999, 0); // just example
  if (res < 0) or (res = INVALID_SOCKET) then break;
 end;
 // Free Stuff, Disconnect, etc...
end;

1 个答案:

答案 0 :(得分:2)

服务器是否能够同时写入10个客户端?一次1个recv函数是否意味着每个客户端按顺序接收数据或者只有一个客户端工作而其他9个客户端失败?

您可以尝试创建chargen server进行测试。在不同的端口上运行10个副本(因此不需要测试/考虑chargen服务器中的线程)并将客户端连接到每个端口。