2007-10-24

使用 Channel 进行可靠传输

Views: 13173 | Add Comments

Channel 是一个通信线路, 建立在 UdpLink, TcpLink, HttpLink 或者更多类型的 Link 之上. 当建立在不提供可靠传输服务的 Link(如 UdpLink)之上时, Channel 能保证可靠传输.

Channel 的另一个功能是对一条 TCP/IP 层次上的网络连接(如 TCP, UDP, IP, HTTP 等)多路复用, 使得可以在一条网络连接上同时传输文本, 图像, 音频, 视频等. 这表示, 你在等待给对方发送一张大图片过程中, 可以继续进行文本和视频聊天, 而不必盯着静止的屏幕等待图片传输完成. 你需要做的工作只是建立多条 Channel, 而 Channel 的建立是立即完成的, 不会像建立网络连接那样有非常大的网络延时.

ILink link = ...; // 例如将一个 UdpLink 赋值给 link.
IChannel ch1 = link.Bind(1); // 建立编号为 1 的 Channel.
ch1.Connect(1001); // 连接对方的 1001 号 Channel.

byte[] dataToSend = Encoding.UTF8.GetBytes("Hello from 1.");
ch1.Send(dataToSend); // 发送数据给对方

byte[] buffer = new byte[1024];
int n = channel.Read(buffer); // 从 Channel 中读取数据到缓冲区中.
// 打印接收到的数据.
Console.WriteLine("Read {0} bytes from remote: {1}", n, Encoding.UTF8.GetString(buffer, 0, n));

IChannel ch2 = link.Bind(2); // 建立编号为 2 的 Channel.
ch1.Connect(1002); // 连接对方的 1002 号 Channel.

... // 操作 ch2.

Channel 的表现类似 TCP socket, 提供流式的字节传输服务. 有了 Channel, 你便可以开发你自己的应用.

备注: 本文是关于我的 P2P SDK 的介绍的一部分, 详细文档请见 http://www.ideawu.com/p2p/

Related posts:

  1. Ideawu.P2P API 简介
  2. C# P2P 传输模块
  3. 使用 Ideawu.P2P.Core.UdpLink 进行 NAT 穿透
  4. 通过 HTTP POST 发送二进制数据
  5. 要记得清除 sockaddr_in
Posted by ideawu at 2007-10-24 11:21:59

Leave a Comment