2013-02-24 63 views
0
static void tcp() 
    { 
     MessageBox.Show("Beginning..."); 
     System.Net.IPAddress ipAddress = System.Net.IPAddress.Parse("127.0.0.1"); 
     IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 20061); 
     TcpClient connection = new TcpClient(); 
     connection.Connect(ipEndPoint); 
     NetworkStream stream = connection.GetStream(); 
     var reader = new StreamReader(stream); 
     var writer = new StreamWriter(stream); 
     writer.WriteLine("/api/subscribe?source=console&key=d41c411558628535bbad927b1ad667c823e37a7e06e1b0a61ce707ed287bb4bb&show_previous=true"); 
     writer.Flush(); 
     var line = reader.ReadLine(); 
     if (line != "success") 
      throw new InvalidOperationException("Failed to connect"); 
     while ((line = reader.ReadLine()) != null) 
     { 
      MessageBox.Show(line); 
      Program.Form3 Form3 = new Program.Form3(); 
      Form3.textBox1.Text = Form3.textBox1.Text + "\r\n" + line; 
     } 
    } 

這是我得到的代碼。我想連接到我的服務器,通過TCP等待請求。但是,這段代碼不起作用,我不知道爲什麼。當它在主線程上時,程序就凍結了。現在,當它在另一個線程(tcp())上時,什麼都沒有發生,並且服務器甚至沒有收到任何東西。TcpClient不連接,程序死機,服務器沒有收到任何東西

我檢查服務器是否完全正常運行,它100%的工作。我使用SimpleTCP進行檢查。 (我連接到127.0.0.1通過端口20061,併發出了命令「/ API /訂閱?源=控制檯&鍵= d41c411558628535bbad927b1ad667c823e37a7e06e1b0a61ce707ed287bb4bb & show_previous =真」,並開始接受字符串我想要的。)

我只是想連接到TCP,發送一個命令,並開始接收字符串。

噢,我確定會調用線程,當我點擊按鈕「連接」時出現消息框。

+0

您能否添加服務器實現的代碼? – 2013-03-07 19:02:01

回答

1

完成寫入命令後,請嘗試調用writer.Flush()。當緩衝區已滿時,允許使用StreamWriter緩衝數據並寫入。 Flush()刷新寫緩衝區,這是你想要的。

+0

感謝您的回覆,我在發送命令後添加了writer.Flush(),但它仍然無效。我在問題中加入了同花。 – niklon 2013-02-24 16:24:22

0

我認爲 當您使用writer.WriteLine(字符串)時,字符串通過UTF16編碼轉換爲字節數組。 當您使用SimpleTCP時,您將數據作爲ASCII發送。

+0

如何將它作爲ASCII發送? – niklon 2013-03-01 16:09:07

相關問題