2012-08-09 2 views
0

약 10 개의 스레드가있는 클라이언트로 winsock을 사용하고 있습니다.다른 스레드의 Winsock recv

각 스레드는 동일한 호스트와 포트에 고유 한 연결을 가지고 있습니다. 모든 스레드가 연결되어 있고 모두 일정한 바이트 양을 읽어야합니다 ( ). 한 번에 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; 

답변

2

서버가 동시에 10 개의 클라이언트에 쓸 수 있습니까? 한 번에 1 recv 함수는 각 클라이언트가 순서대로 데이터를 받거나 하나의 클라이언트 만 작동하고 다른 하나는 실패한다는 것을 의미합니까?

테스트하려면 chargen server을 만들 수 있습니다. 다른 포트에서 10 개의 사본을 실행하십시오 (chargen 서버의 스레드는 테스트/고려할 필요가 없습니다). 클라이언트를 하나의 포트에 각각 연결하십시오.

+0

indy를 사용합니다. 9. 나중에 내 게시물을 소스 코드로 업데이트합니다. –

+0

제 잘못입니다. 지금은 잘 작동합니다. Indy에 문제가있었습니다. –