다음 코드 조각은 4-5 스레드로 병렬 때 잘 실행하지만, 스레드의 수가 10 개 동시 스레드Socket.Recieve 실패하면 멀티 스레드
int totalRecieved = 0;
int recieved;
StringBuilder contentSB = new StringBuilder(4000);
while ((recieved = socket.Receive(buffer, SocketFlags.None)) > 0)
{
contentSB.Append(Encoding.ASCII.GetString(buffer, 0, recieved));
totalRecieved += recieved;
}
Recieve
메소드가 리턴을 넘어 어딘가에 증가로 실패하기 시작 읽은 바이트가 0 인 상태에서 계속 메소드를 호출하면 예외가 발생합니다. '설정된 연결이 호스트 시스템의 소프트웨어에 의해 중단되었습니다'. 따라서 호스트가 실제로 데이터를 보낸 다음 연결을 닫은 것으로 가정합니다. 그러나 어떤 이유로 그것을받지 못했습니다.
많은 스레드가있을 때 왜이 문제가 발생하는지 궁금합니다. 나는 그것이 각 스레드가 많은 실행 시간을 얻지 못하며 따라서이 오류를 일으키는 스레드에 대한 유휴 시간이 있다는 사실과 관련이 있다고 생각하고있다. 유휴 시간으로 인해 소켓에서 데이터를받지 못하는 이유를 알 수 없습니다.
편집 : 설명하기 만하면됩니다. 각 스레드는 다른 데이터를 읽는 자체 소켓을 가지고 있습니다.
각 스레드는 자체 소켓을 가지고 있습니다. –
스레드 하나당 하나의 소켓을 읽거나 스레드 당 하나의 소켓을 읽는 스레드가 많은 경우 분명하지 않습니다. – ParmesanCodice
SocketError 코드 (SocketException.ErrorCode)를 알고 계십니까? 시간 초과 될 수 ... – ParmesanCodice