2011-04-17 33 views
0

我有一個使用TcpListener的服務器應用程序。它監聽連接,當它得到它時,StreamReader會通過流讀取流,並將流傳遞給基於請求提供答覆的方法。答覆是從.html文件讀取的字符串。我的客戶端應用程序接受回覆並將該字符串設置爲webBrowser1.Documenttext屬性。問題:我的服務器似乎沒有收到請求,但這兩個應用程序似乎彼此連接(退出服務器會在客戶端計算機上產生錯誤)。這裏是我的代碼:在兩個TCP應用程序之間傳輸數據的問題

服務器:

static void Main(string[] args) 
    { 
     Console.WriteLine("Application Started"); 
     IPHostEntry host; 
     string localIP = "?"; 
     host = Dns.GetHostEntry(Dns.GetHostName()); 
     foreach (IPAddress ip in host.AddressList) 
     { 
      if (ip.AddressFamily.ToString() == "InterNetwork") 
      { 
       localIP = ip.ToString(); 
      } 
     } 

     IPAddress hostIP = IPAddress.Parse(localIP); 
     TcpListener listener = new TcpListener(hostIP, 1986); 
     string request; 
     StreamWriter swStream; 
     StreamReader srStream; 

     listener.Start(); 
     while (listener.Pending() == true) 
     { 
      listener.AcceptTcpClient(); 
      Console.WriteLine("New Client Accepted"); 
      TcpClient client = listener.AcceptTcpClient(); 
      srStream = new StreamReader(client.GetStream()); 
      request = srStream.ReadToEnd(); 
      Console.WriteLine("Stream has been read."); 
      swStream = new StreamWriter(client.GetStream()); 
      string responseText = handleRequest(request); 
      swStream.Write(responseText); 
     } 

     Console.ReadLine(); 
    } 

客戶:

private void getInfo(string request) 
    { 
     string dispCode; 
     string hostName; 
     TcpClient client; 

     //set IP & host 
     serverIP = (IPAddress.Parse(SGAClient.Properties.Settings.Default.ServerIP)); 
     hostName = (Dns.GetHostEntry(serverIP).ToString()); 


     client = new TcpClient(); 
     client.Connect(serverIP, 1986); 

     StreamWriter swStream = new StreamWriter(client.GetStream()); 
     swStream.Write(request); 

     StreamReader srStream = new StreamReader(client.GetStream()); 

     //sets the value of the display code 
     string response = srStream.ReadToEnd(); 

     swStream.Close(); 
     srStream.Close(); 
     client.Close(); 
     //displays the information from the server 
     displayInfo(response); 
    } 

回答

1
listener.AcceptTcpClient(); 
Console.WriteLine("New Client Accepted"); 
TcpClient client = listener.AcceptTcpClient(); 

您接受客戶(放棄吧)...然後嘗試再次接受它。

相關問題