c#网络编程的问题,关于TcpClient类。

2024-12-28 17:25:14
推荐回答(5个)
回答1:

问题3:实例化client后要开一个线程来读写数据的。

1:对,read放在while循环 当然这样cpu会挂,不过Read会让线程挂起 还需要一个推出线程的方法,就是while循环何时break 需要ManualResetEvent这个类来控制

2: Read是阻塞的,服务器不发消息Read一直阻塞,Read一个byte[]是你自己指定 比如
byte[] buffer=new byte[512] Read的第三个参数size就是512
比如服务器发来1025个字节 第一次Read512个 第二次Read512个 第三次Read1个 第四次Read会挂起了 接受了多少个字节? Read返回int 相加肯定是1025了

目的是缓存 如果TcpServer发来1G的数据 client不用缓存读肯定挂了。

回答2:

1、Read放在while里面,也可以异步接收,
2、你的第二个问题可以用“消息边界”来解决,不用异步的话,必须是你一条,我接收,再发,不然会阻塞
3、另开线程接收,建议你看一下MSDN,里面有一个关于线程的返回值的文章

回答3:

要有一个单独的线程用于数据的读入

回答4:

1不要;2while一直,byte.length;3多线程单socket

回答5:

Read方法在会组塞当前线程,所以建议使用独立的线程作Read的容器
在内部再使用一个适配器来处理获取的消息或命令