2011-02-25 3 views
0

나는 TcpServer에서 받아 들일 수있는 TcpClient를 C#으로 가지고 있다고 말하며 어떤 이유로 차단을 기본값으로 유지합니다. 소켓 차단이 설정되는 방식을 변경할 수있는 다른 힘이 있습니까? 말은 원격 연결의 영향을 받습니까?C# 소켓 블로킹

몇 가지 빌드를 취소하기 위해 블로킹을 설정했음을 알고 있지만이를 변경하고 스트레이트 소켓 대신 TcpClient를 도입했습니다. 블로킹을 사실로 변경하지는 않았지만 블로킹 = 아웃을 주석 처리했습니다. 그것은 종말점과 함께 지속될 것인가?

언젠가 프로그래밍 할 때 내 소켓이 코드에서 실제 변화없이 쉽게 풀리지 않는 것처럼 보였을 지 모르겠다.

public void GetAcceptedSocket(TcpClient s) 
{ 
    try 
    { 
     sock = s; 
     IPEndPoint remoteIpEndPoint = s.Client.RemoteEndPoint as IPEndPoint; 
     strHost = remoteIpEndPoint.Address.ToString(); 
     intPort = remoteIpEndPoint.Port; 
     ipEnd = remoteIpEndPoint; 
     sock.ReceiveTimeout = 10000; 
     boolConnected = true; 
     intLastPing = 0; 
     LastPingSent = DateTime.Now; 
     LastPingRecieved = DateTime.Now; 
     handleConnect(strHost, intPort); 
     oThread = new Thread(new ThreadStart(this.run)); 
     oThread.Start(); 
    } 
    catch (Exception e) 
    { 
     handleError(e, "Connect method: " + e.Message); 
    } 
} 

답변

0

정말 답이 없습니다. 필자는 중복 된 적이 없으며, 몇 개월이 지난 후 신선한 창을 설치하고 코드를 선택하고 더 이상 문제가 없었습니다. 매우 이상하지만, 도전적으로 그것을위한 프로그래밍 방식 추론을 찾을 수 없습니다. 내가 말했듯이, 몇 달 후에 그것은 단지 약간 일 했나요? 그들은 'Unawnserable'옵션을 가지고 있어야합니다 : p.

+0

이봐, 나는 사회자에게 물어 보았다. 그리고 그들은 나에게 내 자신의 awnser에 투표하라고했다. 그래서 나를 downvote하지 마십시오. –

2

등 전혀 원격 연결에 의해 영향을받는 말?

아니요.

서버 측에 Socket 또는 TcpClient을 만드는 코드를 표시하는 것이 더 좋을 것입니다. C#에서 TcpServer 클래스를 찾을 수 없습니다. TcpListener에 대해 이야기하고 있습니까? AcceptSocket을 사용하여 새 소켓을 만드는 경우 set Socket's Blocking true을 입력하십시오. AcceptTcpClient으로 전화하면 TcpClient이 항상 차단 모드이므로 차단 또는 비 차단 모드에 대해 걱정할 필요가 없습니다.

하여 TcpClient 클래스는 접속 전송 및 은 동기 블록 모드 에서 네트워크를 통해 데이터 스트림을 수신하기위한 간단한 방법을 제공 .

MSDN.

+0

그게 좋았지 만 AcceptTcpClient가 나에게 TcpClient에 차단 기능이있는 소켓을 제공했을 때 말하고있었습니다. 그것은 우려 사항이었습니다. –

+0

@ kelton25, 차단이 해제되었음을 어떻게 알 수 있습니까? – young

+0

중단 점, TcpClient.Client의 상태를 확인했습니다. 블로킹 –