TC官方合作论坛

标题: TC网络空间通信 第十六章 [打印本页]

作者: Abin    时间: 2012-8-15 12:07
标题: TC网络空间通信 第十六章
TC网络空间通信
TC的网络通信根据TCP/IP和UDP协议实现的,因此遵守协议的规定。那么我们先来熟悉下这2个协议吧。

UDP协议
UDP协议是英文User Datagram Protocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络连接。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些。
类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。尤其是在需要很强的实时交互性的场合,如网络游戏、视频会议等,UDP协议更是显示出极强的威力。
UDP协议是一种面向非连接的协议,面向非连接指的是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。至于对方是否可以接收到这些数据内容,UDP协议无法控制,因此说UDP协议是一种不可靠的协议。

UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。因为UDP协议是面向非连接的协议,没有建立连接的过程,因此它的通信效率高;但也正因为如此,它的可靠性不如TCP协议高。
UDP协议的主要作用是完成网络数据流量和数据报之间的转换:在信息的发送端,UDP协议将网络数据流量封装数据报,然后将数据报发送出去;在信息的接收端,UDP协议将数据报转换成实际数据内容。

实际上,我们可以认为基于UDP协议的Socket类似于一个码头,该码头的作用就是负责发送、接收集装箱,一个数据报类似于一个集装箱。因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器端的概念。


TCP/IP协议
TCP/IP是发展至今最成功的通信协议之一,其开放性的特点成为了因特网的基础。

在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户机/服务器模式。
服务器是一个进程,它一直等待着客户进程的请求以便为客户进程服务, 客户进程向服务器提出请求,服务器对请求做出相应的处理并执行被请求的任务,然后将结果返回给客户机。这里还要讲到一个概念套接字(Socket),Socket是通信基石,是支持TCP/IP协议网络通信的基本单元。
一个Socket就是一个通信的端点,用以一个短整数来表示。
注意:Socket不是端口号,它只是一个句柄,代表网络协议中的一组数据,这组数据包括TCP连接中双方IP地址以及目前连接状况。 一个正在被 使用的Socket都有它的类型和与其相关的网络应用进程。

在介绍UDP协议基础内容方面,我们需要对UDP和TCP进行一下简单的对比:
TCP协议:可靠,传输大小无限制,但是需要连接建立时间,差错控制开销大。
UDP协议:不可靠,差错控制开销较小,传输大小限制在64K以下,不需要建立连接。

根据通信性质,Socket可以分为两类:
   Stream Socket(会话套接字):使用TCP协议,提供一种面向连接的可靠数据通信方式.当要发送在批量数据或想让发出的数据按顺序无重复地到达目的地时,就要使用会话套接字,但需要很多开销。
    Datagram Socket(数据报套接字):使用UDP协议,提供不可靠的,非连接的数据通信方式,具有向多个目标地址发送广播数据报的能力,由于其并不十分可靠,需要应用程序负责管理数据报的排序和可靠性。
总之,若要用TCP协议那Socket就必须设为Stream,反之,用UDP就设为Datagram。

UDP协议的使用
下面介绍下UDP服务器、客户端的流程:
UDP服务端创建流程
1、初始化网络环境(网络.初始化())
2、创建套接字(网络.套接字())
3、绑定套接字并开启端口(网络.绑定())
4、接收或发送数据(网络.接收来自()、网络.发送到())
5、关闭套接字(网络.关闭套接字())
6、关闭初始化网络环境(网络.关闭())

UDP客户端创建流程
1、初始化网络环境(网络.初始化())
2、创建套接字(网络.套接字())
3、接收或发送数据(网络.接收来自()、网络.发送到())
4、关闭套接字(网络.关闭套接字())
5、关闭初始化网络环境(网络.关闭())

图解如下:

[attach]4751[/attach]


UDP模式注意: UDP模式的服务端概念比较模糊,需要接收数据需要 绑定<bind>端口,这时可以看做是服务端了,如果只发送数据不需要 绑定<bind>端口,这时可以看做是客户端(客户端只能接收来自他发送过消息的服务器传回的消息,不能接收来自别的客户端的消息),UDP模式下先打开服务端或先打开客户端都可以,如果在接收方打开之前,发送数据,这之前发送的数据将会丢失,UDP模式只管发送数据,不管数据是否到达。

实例源码如下
服务器代码
  1. 网络.初始化() //初始化网络环境
  2.     整型 服务器套接字句柄=网络.套接字(2) //创建数据报(UDP)套接字
  3.     网络.绑定(服务器套接字句柄,9999) //开启了计算机的9999端口,供外界连接
  4.     整型 rPort
  5.     字符型 接收缓存,rIP,发送缓存="客户端,我是服务器端!"
  6.     循环(真)
  7.         如果(网络.接收来自(服务器套接字句柄,接收缓存,100,rIP,rPort) )//接收数据
  8.             辅助.消息框(接收缓存)
  9.             网络.发送到(服务器套接字句柄,发送缓存,rIP,rPort)
  10.         如果结束
  11.     循环结束
  12.     网络.关闭套接字(服务器套接字句柄) //关闭套接字释放资源
  13.     网络.关闭() //关闭网络环境释放资源
复制代码

客户端代码
  1. 网络.初始化() //初始化网络环境
  2. 整型 服务器套接字句柄=网络.套接字(2) //创建数据报(UDP)套接字
  3. 整型 rPort
  4. 字符型 接收缓存,rIP,发送缓存="服务器,我是客户端"
  5. 网络.发送到(服务器套接字句柄,编辑框.获得文本("编辑框0"),"127.0.0.1",9999) //向指定地址端发送一串字符串
  6. 网络.接收来自(服务器套接字句柄,接收缓存,100,"127.0.0.1",9999) //接收数据
  7. 辅助.消息框(接收缓存) //打印从指定地址接收的字串
  8. 网络.关闭套接字(服务器套接字句柄) //关闭套接字释放资源
  9. 网络.关闭() //关闭网络环境释放资源
复制代码


TCP/IP协议的使用
下面介绍下TCP/IP服务器、客户端的流程:
TCP 服务端创建流程
1、初始化网络环境(网络.初始化())
2、创建套接字(网络.套接字())
3、绑定套接字并开启端口(网络.绑定())
4、监听套接字并设置可同时连接数(网络.监听())
5、接受连接(网络.接受())
6、接收或发送数据(网络.接收()、网络.发送())
7、返回等待另一客户请求(关闭网络.接受()创建的客户端套接字,重新调用网络.接受()创建新的客户端套接字)
8、关闭套接字(网络.关闭套接字())
9、关闭初始化网络环境(网络.关闭())

TCP 客户端创建流程
1、初始化网络环境(网络.初始化())
2、创建套接字(网络.套接字())
3、与服务器建立连接(网络.连接())
4、接收或发送数据(网络.接收()、网络.发送())
5、关闭套接字(网络.关闭套接字())
6、关闭初始化网络环境(网络.关闭())


图解如下:

[attach]4752[/attach]


实例代码如下
服务器代码
  1. 网络.初始化() //初始化网络环境
  2.     整型 服务器套接字句柄=网络.套接字(1) //创建流式(TCP)套接字
  3.     网络.绑定(服务器套接字句柄,9999) //开启了计算机的9999端口,供外界连接
  4.     网络.监听(服务器套接字句柄,5) //监听套接字,设置可连接数为5个
  5.     字符型 返回IP,发送缓存="客户端,你好,我是服务器",接收缓存
  6.     循环(真) //循环接受处理连接
  7.         整型 客户端套接字句柄=网络.接受(服务器套接字句柄,返回IP)//这里程序会挂起等待,直到有客户端连接到来
  8.         网络.发送(客户端套接字句柄,发送缓存)//向指定客户端发送一串字符串
  9.         网络.接收(客户端套接字句柄,接收缓存) //接收从客户端发送的字串
  10.         辅助.消息框(接收缓存) //打印从客户端接收的字串
  11.         网络.关闭套接字(客户端套接字句柄) //关闭套接字释放资源
  12.         如果(接收缓存=="关闭") //客户端如果发送 关闭 服务器将关闭
  13.             辅助.消息框("服务器关闭")
  14.             跳出
  15.         如果结束
  16.     循环结束
  17.     网络.关闭套接字(服务器套接字句柄) //关闭套接字释放资源
  18.     网络.关闭() //关闭网络环境释放资源   
复制代码

客户端代码
  1. 网络.初始化() //初始化网络环境
  2. 整型 客户端套接字句柄=网络.套接字(1) //创建流式(TCP)套接字
  3. 网络.连接(客户端套接字句柄,"127.0.0.1",9999) //这里测试所以连接的是本机
  4. 字符型 发送缓存="服务器,你好,我是客户端",接收缓存
  5. 网络.接收(客户端套接字句柄,接收缓存) //接收从服务器发送的字串
  6. 辅助.消息框(接收缓存) //打印从服务器接收的字串
  7. 网络.发送(客户端套接字句柄,发送缓存)//向指定服务器发送一串字符串
  8. 网络.关闭套接字(客户端套接字句柄) //关闭套接字释放资源
  9. 网络.关闭() //关闭网络环境释放资源
复制代码

网络命令的使用范围很广泛,大家可以根据自己的需要加入深入。


[attach]4753[/attach]


对上一章内容还不熟悉的同学可以回顾一下文件操作
http://bbs.tyuyan.com/thread-15409-1-1.html







作者: 陌上青衣。    时间: 2012-8-15 12:27
沙发.
很强大

作者: jrflsh    时间: 2012-8-15 12:36
占领板凳,好东西,收藏了,正需要呢
刚看到官方出这类型的视频了,非常的给力!!!
网络读内容和网络发送内容的什么时候能出呢
作者: zxyc2000    时间: 2012-8-15 14:43
顶 相当强大
作者: whoyeyang    时间: 2012-8-15 15:58
顶~~
作者: z771591223    时间: 2012-8-15 18:36
顶 相当强大
作者: myismaln    时间: 2012-8-16 19:36
不错,暂时用不到
作者: 最爱念    时间: 2012-8-17 09:12
终于有这个的教程了
作者: 清风流水2060    时间: 2012-8-18 01:26
外网能连接吗
作者: Abin    时间: 2012-8-18 12:04
回复 9楼清风流水2060的帖子

可以,只要你把端口映射到外网。
作者: zzqtkj    时间: 2012-8-20 14:52
可以做封包吗?
作者: stxuhong    时间: 2012-8-24 12:31
顶 相当强大
作者: 105735417    时间: 2012-8-25 18:22
新手看不懂 但是收藏了
作者: 1192576065    时间: 2012-8-26 18:56
看卡巴!!!
作者: myismaln    时间: 2012-9-17 11:50
为什么接收只接收一次就不工作了呀
作者: a5754556    时间: 2012-10-13 12:33
句丙怎么解释?
作者: zxlm119    时间: 2012-10-16 15:59
强大~~
作者: 947895630    时间: 2012-11-15 20:38
正在找这方面的教程!!
作者: benxin1225    时间: 2012-12-3 08:14
回复 1楼Abin的帖子

以后再学
作者: laowantong    时间: 2013-3-2 08:16
xx学习
作者: liuqh759477909    时间: 2013-3-6 23:54
回复 1楼Abin的帖子

阿斌老师,如果你是个女人,我想娶你回家。
作者: zhuzhixun521    时间: 2013-3-21 02:01
刚看到官方出这类型的视频了,非常的给力!!!
作者: 五行    时间: 2013-4-28 16:00
网络读内容和网络发送内容的什么时候能出呢
作者: hnxhyhl    时间: 2013-5-19 15:45
灰常不错
作者: a869848744    时间: 2013-7-23 19:17
感谢楼主
作者: liar    时间: 2013-10-28 18:25
>错误:C:\Users\Administrator\Desktop\网络空间TCP与UDP实例\TCP通信\TCP通信\TCP通信.t 行号:4 错误信息:'逻辑型 开始_点击'中出现不是命名规范中的字符,只能出现字母,数字和下划线


这个怎么回事?
作者: slz336    时间: 2014-8-26 13:36
好好~~谢谢啊,我是刚来的~辛苦了




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1