第二章 简单的UDP通讯示例

来源:互联网 发布:五金进入货软件 编辑:程序博客网 时间:2024/04/29 08:35

TCP:可靠,稳定,对系统的资源要求高。

UDP:简单的面向数据报传输层协议,无连接,不可靠。无连接指通讯前不会确定对方的状态,不可靠是直接按照指定端口和IP发送数据,不在线的话可能丢失。

UDP发送和接收数据使用sendto和recvfrom。


服务器端代码:

#include <stdio.h>#include <InitSock.h>CInitSock InitSock;int main(){SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if(s == INVALID_SOCKET){printf("Failed socket() \n");return 0;}sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(4567);sin.sin_addr.S_un.S_addr = INADDR_ANY;if(bind(s, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR){printf("Failed bind() \n");return 0;}char buff[1024];sockaddr_in addr;int nLen = sizeof(addr);while(TRUE){int nRecv = recvfrom(s, buff, 1024, 0, (sockaddr*)&addr, &nLen); if(nRecv > 0){buff[nRecv] = '\0';printf(" 接收到数据(%s):%s", ::inet_ntoa(addr.sin_addr), buff);}}closesocket(s);return 0;}

客户端代码:

#include <InitSock.h>#include <stdio.h>CInitSock initSock;int main(){SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if(s == INVALID_SOCKET){printf("Failed socket() %d \n", WSAGetLastError());return 0;}sockaddr_in addr; addr.sin_family = AF_INET;addr.sin_port = htons(4567);addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");char szText[] = " UDP Server Demo! \r\n";sendto(s, szText, strlen(szText), 0, (sockaddr*)&addr, sizeof(addr));closesocket(s);return 0;}


UDP和TCP的不同,和简单的UDP程序


本来第二章还有个时间校对的,但是换了几个服务器,老是连接不通,就不发了。


0 0
原创粉丝点击