socket 编程入门教程
标准 BSD socket 编程的入门教程。是单独的专集,也作为“SDL入门教程”第十四章的一部分。
socket 编程入门教程(六)UDP应用:2、UDP版的Echo Client
摘要: 我们将UDP版的doEcho()也设计成返回bool:true表示循环继续;false表示关闭客户端。
阅读全文
posted @
2010-06-12 12:11 lf426 阅读(3692) |
评论 (2) 编辑
socket 编程入门教程(六)UDP应用:1、UDP版的Echo Server
摘要: 这里跟TCP有些细微的差别。在TCP中,recv()返回0表示连接正常断开,而UDP中没有连接和断开的概念,recv()或者recvfrom()返回0表示收到一个0字节大小数据的数据报。另外,因为TCP是一对一连接的,所以一旦连接上,TCP服务器只能处理来自一个客户端的echo请求(后面会讲到多线程的使用,就可以让TCP同时处理多个客户端了);而UDP服务器则可以处理来自任何客户端的echo请求,为了返回信息到正确的客户端,我们的策略是,接收一个UDP数据包后,马上刷新发送目标地址为上一次接收地址,然后再回发数据,所以这里每次多了一个重新指定发送目的地的函数。
阅读全文
posted @
2010-06-12 11:16 lf426 阅读(2467) |
评论 (2) 编辑
socket 编程入门教程(五)UDP原理:5、预读MSG_PEEK
摘要: 因为UDP是按数据包接收的,我们在接收之前并不知道这个数据包有多大。一个策略是,我们准备足够大的应用程序缓存以免出错,但是这个“足够大”的概念是建立在我们对传送的数据事先有了解的情况下,比如是我们自己设计服务器端和客户端并且制定应用层协议;另外一种策略是,将一个数据包的相关信息记录在数据包的前面的一些字节中,比如说大小,这样,我们可以通过预读数据包的前面一段,得到这个数据包的相关信息,比如说大小,然后再安排缓存。
阅读全文
posted @
2010-06-11 13:30 lf426 阅读(5343) |
评论 (1) 编辑
socket 编程入门教程(五)UDP原理:4、“有连接”的UDP
摘要: 虽然UDP是无连接的,但是也可以通过调用connect()将本地的UDP socket FD与一个远程的UDP socket FD连接起来。
阅读全文
posted @
2010-06-11 11:51 lf426 阅读(2175) |
评论 (0) 编辑
socket 编程入门教程(五)UDP原理:3、UDP的系统缓存队列
摘要: UDP的系统缓存队列与TCP的相比,有两点显著的不同:
1、UDP没有SendQ。UDP的数据包不会被处理,通过调用sendto()(或者在connect()之后也可以调用send())将数据直接发送。
2、UDP的数据在缓存队列中是有边缘保证的。
阅读全文
posted @
2010-06-11 11:18 lf426 阅读(3021) |
评论 (0) 编辑
socket 编程入门教程(五)UDP原理:2、设计UDP client类
摘要: TCP之所以有个服务器,是因为TCP的客户端只能和自己的服务器端通讯。而UDP的客户端可以与任何一个UDP端口通讯——只要知道对方的地址(IP地址和UDP端口)就可以发送数据包。
阅读全文
posted @
2010-06-10 19:37 lf426 阅读(1709) |
评论 (0) 编辑
socket 编程入门教程(五)UDP原理:1、设计UDP server类
摘要: 人们通常用电话连线来说明TCP协议,而UDP协议,则常常用邮递来做比喻。与TCP有连接的信息传输方式不同,UDP协议被认为是对底层IP协议简单的扩展:协议并不保证每个数据包都会到达目的地,也不保证到达的顺序,而仅仅就是“尽力”的发送每一个数据包。
阅读全文
posted @
2010-06-10 12:16 lf426 阅读(2894) |
评论 (0) 编辑
socket 编程入门教程(四)TCP应用:2、构建echo客户端
摘要: echo客户端的工作原理也很简单:
1、向服务器端发送一个字符串;
2、接收服务器的返回信息(如果是echo服务器就会返回发送出去的字符串本身)。
3、在标准输出中回显服务器返回的信息。
阅读全文
posted @
2010-06-08 11:49 lf426 阅读(2255) |
评论 (1) 编辑
socket 编程入门教程(四)TCP应用:1、构建echo服务器
摘要: echo服务器的工作原理很简单:
1、接收客户端传来的信息;
2、将接收到的信息原封不动的返回给客户端。
阅读全文
posted @
2010-06-08 10:56 lf426 阅读(3168) |
评论 (3) 编辑
socket 编程入门教程(三)TCP原理:7、TCP连接的关闭
摘要: TCP的连接建立需要3次握手,而正常关闭则需要4次握手。
阅读全文
posted @
2010-06-07 20:58 lf426 阅读(2927) |
评论 (0) 编辑
socket 编程入门教程(三)TCP原理:6、字节流的发送与接收
摘要: 在socket机制中,应用层的程序以send()函数将数据首先发送到本机系统的发送缓存中,我们称之为SendQ,意指这是一个FIFO(先进先出)的队列。这个缓存是系统决定的,并不是在我们的程序中指定的。然后socket机制负责将SendQ中的数据以字节为单位,按照顺序发送给对方的接收缓存RecvQ中。RecvQ也是一个属于系统的FIFO缓存队列。在收信息的另外一边,当RecvQ没有数据时,recv()就会阻塞(默认情况下),每当有数据可接收,recv()就会返回实际接收到的数据长度。
阅读全文
posted @
2010-06-07 20:09 lf426 阅读(4006) |
评论 (1) 编辑
socket 编程入门教程(三)TCP原理:5、TCP的三次握手(three-way handshake)
摘要: TCP的三次握手过程如下:
1、第一个SYN连接请求由客户端发起,这个数据报将SYN设置为1表示是一个连接请求,并且包含着这次连接的ISN,我们假设其值为n。
2、服务器端收到第一次握手请求的数据报后开始构建反馈的数据报。反馈数据报包括两个部分:第一部分是将连接请求的序号反馈回去,因为SYN本身占了一个字节,所以反馈回去的序号就是n+1;第二部分是自己也向客户端发起SYN连接请求,也将SYN设置为1,并包含这个新连接的ISN,我们设其值为m。
3、客户端回应服务器端的SYN连接请求,将服务器端到客户端连接的序号反馈回去,因为SYN占了一个字节,所以反馈给服务器端的序号是m+1。
阅读全文
posted @
2010-06-07 13:16 lf426 阅读(3012) |
评论 (0) 编辑
socket 编程入门教程(三)TCP原理:2、设计TCP socket的类(上)
摘要: socket是一个int的文件描述符(WinSock中直接是一种抽象的描述符),我们通过对这个描述符发出指令操作socket。这是C语言的思想,在面向对象的思想中,最好socket本身是一种对象,各种方法由对象本身发出。用面向对象的思想封装socket并不困难,而且,对于描述socket的概念可能更加直观,这一节,我们边介绍socket和TCP的概念边对socket进行OO封装。
(上)基类和监听socket。
阅读全文
posted @
2010-06-06 22:24 lf426 阅读(3853) |
评论 (1) 编辑
Full socket 编程入门教程 Archive