欢迎来到天天文库
浏览记录
ID:3663465
大小:667.80 KB
页数:36页
时间:2017-11-22
《c++基于tcp和udp的socket通信》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、C++基于TCP和UDP的socket通信2011-08-1812:44 5562人阅读 评论(5) 收藏 举报sockettcpc++服务器streaminternet TCP和UDP属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它事先为要发送的数据开辟好连接通道(三次握手),然后再进行数据发送;而UDP则不为IP提供可靠性,一般用于实时的视频流传输,像rtp、rtsp就是建立在udp的基础上的。 首先谈谈tcpsocket tcp简单的三次握手过程如图, SYN(SynchronizeSequenceNumbers):同步
2、标志 ACK(AcknowledgementNumber) :确认标志 图中可以看出,三次握手的过程是在c的connect()和s的bind()、listen()、accept()函数中完成的,这样开辟了相对可靠的连接通道,来传输数据。UDP的socket编程过程如下图所示:下面翠花上代码啦!服务端:[cpp] viewplaincopy1.#include 2.#include //windows socket的头文件 3. 4.#pragma comment( lib, "ws
3、2_32.lib" )// 链接Winsock2.h的静态库文件 5. 6.void main() 7.{ 8. //初始化winsocket 9. WORD wVersionRequested; 10. WSADATA wsaData; 11. int err; 12. 13. wVersionRequested = MAKEWORD( 1, 1 );//第一个参数为低位字节;第二个参数为高位字节 14. 15. err = WSAStartup( wVersionRequested, &wsaD
4、ata );//对winsock DLL(动态链接库文件)进行初始化,协商Winsock的版本支持,并分配必要的资源。 16. if ( err != 0 ) 17. { 18. return; 19. } 20. 21. if ( LOBYTE( wsaData.wVersion ) != 1
5、
6、HIBYTE( wsaData.wVersion ) != 1 )//LOBYTE()取得16进制数最低位;HIBYTE()取得16进制数最高(最左边)那个字节的内容 22. { 23.
7、 WSACleanup( ); 24. return; 25. } 26. 1. SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//创建socket。AF_INET表示在Internet中通信;SOCK_STREAM表示socket是流套接字,对应tcp;0指定网络协议为TCP/IP 2. 3. SOCKADDR_IN addrSrv; 4. addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //hto
8、nl用来将主机字节顺序转换为网络字节顺序(to network long) 5. //INADDR_ANY就是指定地址为0.0.0.0的地址, 6. //表示不确定地址,或“任意地址”。” 7. addrSrv.sin_family=AF_INET; 8. addrSrv.sin_port=htons(4000);//htons用来将主机字节顺序转换为网络字节顺序(to network short) 9. 10. bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))
9、;//将本地地址绑定到所创建的socket上,以使在网络上标识该socket 11. 12. listen(sockSrv,5);//socket监听,准备接受连接请求。 13. 14. SOCKADDR_IN addrClient; 15. int len=sizeof(SOCKADDR); 16. 17. while(1) 18. { 19. SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//为一个连接请求提供服务。a
10、ddrClient包含了发出连接请求的客户机IP地址信息;返回的新
此文档下载收益归作者所有