在之前的博文中, 我玩过Windows下的udp, 而linux下的udp也类似, 而且, 相比较tcp而言, 我发现我越来越喜欢udp了。话不多说, 直接上菜:
服务端程序为:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main()
{
struct sockaddr_in srvAddr;
bzero(&srvAddr,sizeof(srvAddr));
srvAddr.sin_family = AF_INET;
srvAddr.sin_addr.s_addr = htonl(INADDR_ANY);
srvAddr.sin_port = htons(8888);
int srvAddrLen = sizeof(srvAddr);
int iSock = socket(AF_INET, SOCK_DGRAM, 0); // udp
bind(iSock, (struct sockaddr *)&srvAddr, sizeof(srvAddr));
while(1)
{
getchar(); // 卡住
char szBuf[1024] = {0};
recvfrom(iSock, szBuf, sizeof(szBuf) - 1, 0, (struct sockaddr *)&srvAddr, (socklen_t*)&srvAddrLen); // 注意: 这里用srvAddr是不好的,应该用cliAd