【发布时间】:2019-10-24 03:27:34
【问题描述】:
我的任务是创建一个向服务器发送 ToString-override 方法的客户端。我的老师给我发了一个Centralcomputer.exe,它是服务器程序,这个程序可以接收单个字符串并使用我的本地IP。
我连接没有问题,尝试执行此行时出现问题Int32 bytesRead = stream.Read(bytesToRead, 0, klient.ReceiveBufferSize);我的客户端冻结并且bytesRead的值为0。
编辑:忘了提到服务器程序在客户端冻结之前会响应一些“东方”字母。
TcpClient client = new TcpClient();
public async Task Connecting()
{
try
{
await client.ConnectAsync("127.0.0.1", 12345);
}
catch (ArgumentNullException e)
{
MessageBox.Show("ArgumentNullException: {0}" + e);
}
catch (SocketException e)
{
MessageBox.Show("SocketException: {0}" + e);
}
public void Sending()
{
string sendToServer = "Testing testing";
byte[] data = System.Text.Encoding.ASCII.GetBytes(sendToServer);
NetworkStream stream = client.GetStream();
stream.Write(data, 0, data.Length);
byte[] bytesToRead = new byte[client.ReceiveBufferSize];
Int32 bytesRead = stream.Read(bytesToRead, 0, client.ReceiveBufferSize);
//This is where the client freezes
MessageBox.Show("Received : " + Encoding.ASCII.GetString(bytesToRead, 0, bytesRead));
}
我以前从未做过这种类型的编码,所以我真的很感谢一些帮助,只是开始!
【问题讨论】:
-
服务器响应应该是什么?
-
我不太清楚你的意思,但是服务器上的输出应该是字符串格式
-
我想知道服务器是否在您向他发送消息后立即响应。
-
哦,是的,响应是大约 5 个“东方”字母,然后客户冻结
-
最后一个问题:如果客户端冻结,您如何知道 bytesRead 变量的值?它会在一段时间后解冻吗?
标签: c# asynchronous tcp tcpclient networkstream