码迷,mamicode.com
首页 > 其他好文 > 详细

基于TCP/UDP的socket编程

时间:2016-07-24 22:27:24      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

基于TCP(面向连接)的socket编程
服务器端顺序: 
1. 创建套接字(socket) 
2. 将套接字绑定到一个本地地址和端口上(bind) 
3. 将套接字设为监听模式,准备接收客户请求(listen) 
4. 等待客户请求的到来;当请求带来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept) 
5. 用返回的套接字和客户端进行通信(send/recv) 
6. 返回,等待另一个客户请求 
7. 关闭套接字(closesocket)
客户端程序: 
1. 创建套接字(socket) 
2. 向服务器发送连接请求(connect) 
3. 和服务器端进行通信(send/recv) 
4. 关闭套接字(closesocket)

TCP建立连接的三次握手发生在socket的那几个函数中呢?请看下图:

技术分享

 

从图中可以看出,当客户端调用connect时,触发了连接请求,向服务器发送了SYN J包,这时connect进入阻塞状态;服务器监听到连接请求,即收到SYN J包,调用accept函数接收请求向客户端发送SYN K ,ACK J+1,这时accept进入阻塞状态;客户端收到服务器的SYN K ,ACK J+1之后,这时connect返回,并对SYN K进行确认;服务器收到ACK K+1时,accept返回,至此三次握手完毕,连接建立。

总结:客户端的connect在三次握手的第二个次返回,而服务器端的accept在三次握手的第三次返回。

 

基于UDP(面向无连接)的socket编程 
服务器端(接收端)程序: 
1. 创建套接字(socket) 
2. 将套接字绑定到一个本地地址和端口上(bind) 
3. 等待接收数据(recvfrom) 
4. 关闭套接字(closesocket) 
客户端(发送端)程序 
1. 创建套接字(socket) 
2. 向服务器发送数据(sendto) 
3. 关闭套接字(closesocket)

 

如何用UDP协议实现TCP协议?

一点思路:使用UDP协议在数据包里添加TCP的头部使其能够实现TCP的基本功能,包括重传,滑动窗口,慢开始和拥塞控制,滑动窗口的大小可以通过命令行指定。即应用层再封装一个TCP报头,然后解析的时候在协议栈里面把偏移多偏几个字节。

参考资料:

[1] Linux Socket编程(不限Linux).
http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html

[2] 如何基于udp实现tcp协议栈?
http://bbs.csdn.net/topics/280046868

基于TCP/UDP的socket编程

标签:

原文地址:http://www.cnblogs.com/mrsandstorm/p/5701683.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!