TCP 编程
1,TCP 的特点: 向应用进程提供面向连接的服务;提供全双工数据传输服务;提供面向字节流的服务;
2,TcpClient 编程与 Socket 的区别?
.NET 提供面向 TCP 编程的相关类 (TcpClient和 TcpListener),比位于底层
的 Socket 类提供了更高层次的抽象,它们封装 TCP 套接字的创建,不需要处理
连接的细节。
3,什么是 TCP 消息无边界问题? 如何解决?
消息无边界是指 TCP 以字节流形式发送消息时,并没有指定消息的长度或消
息边界的标记,因此不能保证单个 Send 方法发送的数据被单个 Receive 方法接
收。
解决方法:1,发送固定长度的消息; 2,将消息长度与消息一起发送; 3,
使用特殊标记分隔消息;
4,TCP 消息网络流
网络流对象(NetworkStream) 只适用于TCP ,不适用于UDP;
NetworkStream netStream=tcpClient.GetStream() //获取网络流
StreamReader sr=new StreamReader(netStream,Encoding.UTF8);
StreamWriter sw=new StreamWriter(netStream,Encoding.UTF8);
…
//发送数据
string str=“发送的数据”;
sw.WriteLine(str); 写带有消息边界标记的消息
//接收数据
string receString=sr.ReadLine();
5,BinaryWriter 的Write 写法会自动附加长度前缀
使用 BinaryWriter 写内容是,该方法会自动计算内容占用的字节数,并使
用 4 个字节作为前缀将其附加到内容的前面;接收时首先读取内容的长度前缀,
并按照该长度接收本次消息的内容。P86
6,TCP 异步
实现模式:
1,基于事件的异步设计模式 ;如:BackGroundWorker、PictureBox 控件
2,基于 IAsync的异步设计模式
异步调用同步方法的使用效果的实质是异步调用,不等同于该方法的同步编
程。