无法使用readline()读取c#中的TCP套接字
本文关键字:读取 中的 TCP 套接字 readline | 更新日期: 2023-09-27 18:25:15
我在C#中制作了一个简单的TCP客户端/服务器,但我遇到了问题。当我用telnet测试代码时,服务器正在读取套接字并写入结果。但是,当我的客户端在套接字上写句子时,服务器在readLine函数处被阻塞。
这是我的客户:
public Boolean initConnection(String ip)
{
try
{
this.client.Connect("127.0.0.1", 40000);
this.output = this.client.GetStream();
this.reader = new StreamReader(this.output, Encoding.UTF8);
this.writer = new StreamWriter(this.output, Encoding.UTF8);
writer.Write("one sentence");
return (true);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return (false);
}
}
这里有我的服务器:
class SNetwork
{
private Thread Tread;
private TcpListener server;
private TcpClient client;
private StreamReader reader;
private StreamWriter writer;
private NetworkStream output;
private State state;
public void initReading()
{
this.server = new TcpListener(IPAddress.Any, 40000);
output = client.GetStream();
reader = new StreamReader(output, Encoding.UTF8);
writer = new StreamWriter(output, Encoding.UTF8);
this.Tread = new Thread(new ThreadStart(this.read)); // this.Tread is a thread
this.Tread.Start();
}
private void read()
{
try
{
while (Thread.CurrentThread.IsAlive)
{
String result;
if (this.client.Client.Poll(10, SelectMode.SelectRead))
{
this.state = State.Closed;
break;
}
else
{
result = reader.ReadLine();
if (result != null && result.Length > 0)
Console.WriteLine(result);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
有人能帮我吗?我找不到解决方案
此代码:
writer.Write("one sentence");
不是在写行终止符,所以你的服务器代码不知道你已经完成了这行。将其更改为WriteLine
(并刷新写入程序),应该没问题。
您需要始终记住,TCP/IP是一个基于流的协议-您不能指望服务器接收到与您发出Write
调用一样多的Read
调用的数据,如果您要在顶部使用线路终止协议,则需要确保您终止了线路。
(另外,遵循.NET命名约定是个好主意…)