【发布时间】: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;
【问题讨论】: