字节[256]在TCP限制为5个字符
本文关键字:5个 字符 TCP 字节 | 更新日期: 2023-09-27 17:49:44
我用。net 3.5 (c#)编写的TCP服务器'客户端出现问题。
每当我使用下面的代码传输数据时,只有5个字符传输到服务器。我如何修复我的代码,使我有超过5个字符转移?
TcpClient client = new TcpClient(connectto.ToString(), portto);
Stream s = client.GetStream();
StreamReader sr = new StreamReader(s);
StreamWriter sw = new StreamWriter(s);
Byte[] data = new Byte[256];
data = System.Text.Encoding.ASCII.GetBytes("auth:" + adminPASS.Text);
s.Write(data, 0, data.Length);
data = new Byte[256];
String responseData = String.Empty;
Int32 bytes = s.Read(data, 0, data.Length);
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
服务器只获得传输内容的前5个字符。
流。Read返回的字节数可能少于请求的字节数,因此需要在循环中调用它,直到达到EOF,如下所示:
int bytes;
int offset = 0;
while ((bytes = s.Read(data, offset, data.Length - offset) != 0)
{
offset += bytes;
}
此外,您从未对流进行Dispose()
处理,因此它们很可能没有被刷新。在所有IDisposable
对象周围使用using
语句
Byte[] data = new Byte[256];
这个分配了256字节
data = System.Text.Encoding.ASCII.GetBytes("auth:" + adminPASS.Text);
将丢弃256字节并转换为"auth:" + adminPASS。以字节为单位的文本
s.Write(data 0, data.length)
发送5字节+ adminPASS.text
的长度看起来您只发送了大约5个字节,特别是如果adminPASS。文本为空
你的大多数对象实现IDisposable,所以需要在using
块
using
块确保Dispose
方法被调用。在本例中,Dispose
将刷新缓冲区并等待所有数据发送完毕。
没关系,获取要在服务器上使用的字符串的原始代码是:
mstrMessage = mstrMessage.Substring(0, 5);
所以它只读取前5个字节的数据。将其更改为bytesReceived。