2012-12-02 5 views
0

TcpClient를 사용하여 StreamWriter가 작성한 스트림을 통해 데이터를 보내는 데 문제가 있습니다.TcpClient 호스트 이름이 응답하지 않습니다.

private void sendMessage(string[] hostlist, string message) 
    { 
     foreach (string host in hostlist) 
     { 
      try 
      { 
       messageClient = new TcpClient(host, 24300); 
       StreamWriter writer = new StreamWriter(messageClient.GetStream()); 
       writer.Write(message); 
       writer.Flush(); 
      } 
      catch (Exception) 
      { 
       MessageBox.Show("Error 1\n" + 
           "This may be due to two things:\n" + 
           "1. The hostname is invalid.\n" + 
           "2. The destination computer is not online.", 
           "Error Sending Message", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 

     } 

    } 

문제는 messageClient가 초기화되는 곳입니다. IP 주소를 사용하면 응답이 전혀 없으며 즉시 메시지를 보내고받을 수 있습니다. 그러나 "lappy"(내 랩톱 이름)와 같은 호스트 이름을 사용하면 프로그램이 정확히 6 초 동안 완전히 정지 한 다음 메시지를 보냅니다. 이것은 호스트 이름을 사용하여 메시지를 보내려고 할 때마다 발생합니다. 내가 여기서 잘못하고 있는게 있니? IP 주소가 아닌 호스트 이름을 사용해야하는 경우 다른 구현이 있습니까?

감사합니다.

답변

0

내가 찾은 최선의 해결책은 호스트 이름을 직접 확인하고 그 주소를 사용하는 것입니다. 예를 들어

,

IPHostEntry hostlist = Dns.Resolve(hostname[0]); 
IPAddress address = hostlist.AddressList[0]; 

하여 IPAddress 주소는 내가 메시지를 전송하게 될 겁니다 주소입니다.

내 프로그램을 계획 할 때 IP 주소가있는 사용자 인터페이스가 없으므로 메시지가 올바른 컴퓨터로 전송되는 한 프로그램이 어떤 IP에 보내는 지 문제가되지 않습니다.

관련 문제