1 / 50
文档名称:

C#socket网络编程.pdf

格式:pdf   大小:470KB   页数:50页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

C#socket网络编程.pdf

上传人:Seiryu 2022/3/30 文件大小:470 KB

下载得到文件列表

C#socket网络编程.pdf

文档介绍

文档介绍:: .
是远程地址。
这里又出现了了一个名词端口。一般来说我们的计算机上运行着非常多的应用程序,它们可能都需要同远程主机打交道,所以远程主机
就需要 有一个 ID 来标识它想与本地机器上的哪个应用程序打交道,这里的 ID 就是端口。将端口分配给一个应用程序,那么来自这个
端口的数据则总是针对这个应用程序 的。有这样一个很好的例子:可以将主机地址想象为电话号码,而将端口号想象为分机号。
中,尽管我们可以直接对套接字编程, 提供了两个类将对套接字的编程进行了一个封装,使我们的使用能够更加方便,
这两个类是 TcpClient 和 TcpListener,它与套接字的关系如下:从上面图中可以看出 TcpClient 和 TcpListener 对套接字进行了封装。从中也可以看出,TcpListener 位于接收流的位 置,TcpClient 位
于输出流的位置(实际上 TcpListener 在收到一个请求后,就创建了 TcpClient,而它本身则持续处于侦听状态,收 发数据都可以由
TcpClient 完成。这个图有点不够准确,而我暂时没有想到更好的画法,后面看到代码时会更加清楚一些)。
我们考虑这样一种情况:两台主机,主机 A 和主机 B,起初它们谁也不知道谁在哪儿,当它们想要进行对话时,总是需要有一方发起连
接,而另一方则需要对本机的某一端口进行侦听。而在侦听方收到连接请求、并建立起连接以后,它们之间进行收发数据时,发起连接
的一方并不需要再进行侦听。因为连接是全双工的,它可以使用现有的连接进行收发数据。而我们前面已经做了定义:将发起连接的一
方称为客户端,另一段称为服务端,则现在可以得出:总是服务端在使用 TcpListener 类,因为它需要建立起一个初始的连接。

实现一个网络聊天程序本应是最后一篇文章的内容,也是本系列最后的一个程序,来作为一个终结。但是我想后面更多的是编码,讲述
的内容应该不会太多,所以还是把讲述的东西都放到这里吧。当采用这种模式时,即是所谓的完全点对点模式,此时每台计算机本身也是服务器,因为它需要进行端口的侦听。实现这个模式的难点
是:各个主机(或终 端)之间如何知道其它主机的存在?此时通常的做法是当某一主机上线时,使用UDP协议进行一个广播(Broadcast),
通过这种方式来“告知”其它主 机自己已经在线并说明位置,收到广播的主机发回一个应答,此时主机便知道其他主机的存在。这种方式
我个人并不喜欢,但在 C#编写简单的聊天程序 这篇文章中,我使用了这种模式,可惜的是我没有实现广播,所以还很不完善。

第二种方式较好的解决了上面的问题,它引入了服务器,由这个服务器来专门进行广播。服务器持续保持对端口的侦听状态,每当有主
机上线时,首先连接至 服务器,服务器收到连接后,将该主机的位置(地址和端口号)发往其他在线主机(绿色箭头标识)。这样其
他主机便知道该主机已上线,并知道其所在位置,从而 可以进行连接和对话。在服务器进行了广播之后,因为各个主机已经知道了其
他主机的位置,因此主机之间的对话就不再通过服务器(黑色箭头表示),而是直接进 行连接。因此,使用这种模式时,各个主机依
然需要保持对端口的侦听。在某台主机离线时,与登录时的模式类似,服务器会收到通知,然后转告给其他的主机。