【问题标题】:Winsock recv in different threads不同线程中的 Winsock recv
【发布时间】:2012-08-09 19:32:40
【问题描述】:

我使用 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;

【问题讨论】:

    标签: delphi-7 winsock delphi


    【解决方案1】:

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

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

    【讨论】:

    • 我用的是indy 9。稍后我会用源代码更新我的帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多