使用c#读取TCP流
本文关键字:TCP 读取 使用 | 更新日期: 2023-09-27 18:04:54
我正在尝试从TCP端口读取字符串。当用Chrome打开端口时,它看起来是这样的,但是如果有更多行:
I_OH_ALPHA_VANE1 = 1
I_OH_ALPHA_VANE2 = 0
I_MIP_ANTI_SKID_INOP = 0
I_FIRE_APU_BOTTLE_DISCHARGE = 0
I_FIRE_TEST_APU = 0
I_OH_APU_FAULT = 0
I_FIRE_APU = 0
I_OH_APU_GEN_OFF = 0
I_OH_APU_LOW_OIL_PRESSURE = 0
I_OH_APU_MAINT = 0
I_OH_APU_OVERSPEED = 0
I_MIP_ASA_APA_1 = 0
I_MIP_ASA_APA_2 = 0
I_MIP_ASA_APR_1 = 0
I_MIP_ASA_APR_2 = 0
I_MIP_ASA_ATA_1 = 0
I_MIP_ASA_ATA_2 = 0
I_MIP_ASA_ATR_1 = 0
I_MIP_ASA_ATR_2 = 0
I_MIP_ASA_FMC_1 = 0
I_MIP_ASA_FMC_2 = 0
I_ASP_ADF_1_REC = 0
I_ASP_ADF_2_REC = 0
I_ASP2_ADF_1_REC = 0
I_ASP2_ADF_2_REC = 0
它基本上就是许多用换行符分隔的ASCII字符串。"加载"符号永远不会消失在铬。我的第一个目标是获取这些字符串并将它们写入richTexBox。我当前的代码是这样的:
try
{
int x= 2048;
TcpClient tcpclnt = new TcpClient();
tcpclnt.Connect("localhost", 8091);
// use the ipaddress as in the server program
Stream stm = tcpclnt.GetStream();
stm.ReadTimeout = 2000;
byte[] bb = new byte[x];
int k = stm.Read(bb, 0, x);
for (int i = 0; i < k; i++)
{
richTextBox2.AppendText(Convert.ToString(Convert.ToChar(bb[i])));
}
tcpclnt.Close();
}
catch ( Exception y )
{
Console.WriteLine("Error..... " + y.StackTrace);
}
这部分工作。richTextBox显示前30行左右,但大约有200多行不见了。我试图增加buffer/byteArray的大小和timeoutTime,但过了一点,这不再有帮助了。有人知道怎么解吗?
(我对编程很陌生,请不要太难)
致以最亲切的问候阿克塞尔
网络传输不是即时的,发送端和接收端都有潜在的缓冲区,往往会填满(阻塞传输),在您的代码块中记住stm.Read
,直到它至少有1个字节要返回,但只返回它可用的数据。它将不阻塞,直到传入的缓冲区填满。所以你必须多次调用它来读取所有的数据。
的例子:
你调用stm.Read
传递2048字节的缓冲区给它。然后服务器开始发送数据,第一个1400字节的块到达,此时你的read调用返回,你的代码继续执行,1毫秒后另一个块到达,但现在你必须再次调用stm.Read
来获得它。