字节[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个字符。

字节[256]在TCP限制为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。