使用TcpClient和使用NetworkStreams在C#中建立与服务器的连接很困难

时间:2012-03-23 16:43:29

标签: c# client tcpclient networkstream

我正在为我的数据通信课程开发一个简单的项目。我预测它最多需要两个小时,但这是我第一次编写与网络连接的软件,而且我第一次使用C#而且我遇到了一个相当大的路障。

我建立了与服务器的连接,但我似乎完全没有得到服务器的反馈。这是我正在执行的用于建立连接的代码:

TcpClient conn = new TcpClient();
conn.Connect(host, port);
StreamReader reader = new StreamReader(conn.GetStream());
StreamWriter writer = new StreamWriter(conn.GetStream());
Console.WriteLine(conn.Connected);   //This line does print true.
//Console.WriteLine(reader.ReadLine());     I thought I'd get a message when I initially
//connected to the server but this line would hang

这是我建立连接的地方。根据项目的规范,输入0应该提示服务器返回票号。所以我有以下代码:

writer.WriteLine("0");
return reader.ReadLine();

prgram在尝试执行reader.ReadLine()时挂起。我在读者中尝试了其他方法,但它似乎都挂在了所有这些方法上。我看了很多代码示例,其设置类似于我的。任何人都可以看到我的代码有任何问题?我不认为这是服务器的问题。我的教授说了一些关于使用unix命令“telnet [host] [port]”的事情,我为这段代码使用了相同的主机和端口。我正在Windows 7机器上开发它。我为C#和网络编程中的无知而道歉。

如果我遗漏了任何可怕的信息,请告诉我。由于这是我第一次处理这个问题,我想我会遗漏一些紧急事情。

非常感谢你们!

1 个答案:

答案 0 :(得分:4)

您需要确保编写器(以及它包装的流)刷新它的输出:

writer.WriteLine("0");
writer.Flush();
return reader.ReadLine();

Streams通常会缓冲信息以优化I / O,因为许多I / O设备在使用比短突发更大的数据流时效率更高。你的“0”可能只是太少的数据导致流实际发送任何东西。这适用于磁盘I / O(写入文件)等内容。