我正在为我的数据通信课程开发一个简单的项目。我预测它最多需要两个小时,但这是我第一次编写与网络连接的软件,而且我第一次使用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#和网络编程中的无知而道歉。
如果我遗漏了任何可怕的信息,请告诉我。由于这是我第一次处理这个问题,我想我会遗漏一些紧急事情。
非常感谢你们!
答案 0 :(得分:4)
您需要确保编写器(以及它包装的流)刷新它的输出:
writer.WriteLine("0");
writer.Flush();
return reader.ReadLine();
Streams通常会缓冲信息以优化I / O,因为许多I / O设备在使用比短突发更大的数据流时效率更高。你的“0”可能只是太少的数据导致流实际发送任何东西。这适用于磁盘I / O(写入文件)等内容。