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编程过程如下图所示:

下面上代码
服务端:
- #include <stdio.h>
- #include <Winsock2.h> //windows socket的头文件
-
- #pragma comment( lib, "ws2_32.lib" )// 链接Winsock2.h的静态库文件
-
- void main()
- {
-
- WORD wVersionRequested;
- WSADATA wsaData;
- int err;
-
- wVersionRequested = MAKEWORD( 1, 1 );
-
- err = WSAStartup( wVersionRequested, &wsaData );
- if ( err != 0 )
- {
- return;
- }
-
- if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )
- {
- WSACleanup( );
- return;
- }
-
- SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
-
- SOCKADDR_IN addrSrv;
- addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
-
-
- addrSrv.sin_family=AF_INET;
- addrSrv.sin_port=htons(4000);
-
- bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
-
- listen(sockSrv,5);
-