基于TCP和UDP的socket通信(C++实现)

本文详细介绍了TCP和UDP两种传输层协议在C++中的实现,通过实例展示了TCP的三次握手过程以及UDP不可靠连接的特点。并提供了TCP服务端和客户端的完整代码示例,帮助理解socket编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP和UDP属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它事先为要发送的数据开辟好连接通道(三次握手),然后再进行数据发送;而UDP则不为IP提供可靠性,一般用于实时的视频流传输。

代码:https://github.com/Miss1nOctober/Chatting-Room

     首先谈谈tcp socket

    tcp简单的三次握手过程如图,

    SYN(Synchronize Sequence Numbers):同步标志  

    ACK(Acknowledgement Number)        :确认标志

    图中可以看出,三次握手的过程是在c的connect()和s的bind()、listen()、accept()函数中完成的,这样开辟了相对可靠的连接通道,来传输数据。

UDP的socket编程过程如下图所示:

下面上代码

服务端:

[cpp]  view plain   copy
  1. #include <stdio.h>  
  2. #include <Winsock2.h> //windows socket的头文件  
  3.   
  4. #pragma comment( lib, "ws2_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, &wsaData );//对winsock DLL(动态链接库文件)进行初始化,协商Winsock的版本支持,并分配必要的资源。  
  16.     if ( err != 0 )  
  17.     {  
  18.         return;  
  19.     }  
  20.   
  21.     if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )//LOBYTE()取得16进制数最低位;HIBYTE()取得16进制数最高(最左边)那个字节的内容        
  22.     {  
  23.         WSACleanup( );  
  24.         return;  
  25.     }  
  26.   
  27.     SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//创建socket。AF_INET表示在Internet中通信;SOCK_STREAM表示socket是流套接字,对应tcp;0指定网络协议为TCP/IP  
  28.   
  29.     SOCKADDR_IN addrSrv;   
  30.     addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //htonl用来将主机字节顺序转换为网络字节顺序(to network long)  
  31.     //INADDR_ANY就是指定地址为0.0.0.0的地址,  
  32.     //表示不确定地址,或“任意地址”。”  
  33.     addrSrv.sin_family=AF_INET;   
  34.     addrSrv.sin_port=htons(4000);//htons用来将主机字节顺序转换为网络字节顺序(to network short)  
  35.   
  36.     bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//将本地地址绑定到所创建的socket上,以使在网络上标识该socket  
  37.   
  38.     listen(sockSrv,5);//socket监听,准备接受连接请求。  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值