📄 win32_udp_svr.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "os_socket.h"
#define MYPORT 4950 /* the port users will be sending to */
#define MAXBUFLEN 100
main()
{
SOCKET sockfd;
struct sockaddr_in my_addr; /* my address information */
struct sockaddr_in their_addr; /* connector's address information */
int addr_len, numbytes;
char buf[MAXBUFLEN];
OS_SOCKET_INIT();
/* 第一步:打开一个UDP socket ,AF_INET指IPV4,SOCK_DGRAM表示是UDP*/
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET) {
PRINTERROR("socket");
exit(1);
}
/* 第二步:设置需要本地绑定的端口*/
my_addr.sin_family = AF_INET; /* host byte order ,AF_INET表示IpV4*/
my_addr.sin_port = htons(MYPORT); /* short, network byte order ,将端口转为网络序*/
my_addr.sin_addr.s_addr = INADDR_ANY; /* auto-fill with my IP ,INADDR_ANY表示所有IP均可接入*/
//bzero(&(my_addr.sin_zero), 8); /* zero the rest of the struct */
memset(&(my_addr.sin_zero),0,8);
/* 第三步,跟某个端口绑定 */
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))== SOCKET_ERROR) {
PRINTERROR("bind");
exit(1);
}
/* 开始遁环接收数据 */
while(1)
{
addr_len = sizeof(struct sockaddr);
/* 用recvfrom阻塞接收数据 ,their_addr存放是远端的机器的IP和端口*/
if ((numbytes=recvfrom(sockfd, buf, MAXBUFLEN, 0, (struct sockaddr *)&their_addr, &addr_len)) == SOCKET_ERROR) {
PRINTERROR("recvfrom");
exit(1);
}
printf("got packet from %s:%d\n",inet_ntoa(their_addr.sin_addr),ntohs(their_addr.sin_port));
printf("packet is %d bytes long\n",numbytes);
buf[numbytes] = '\0';
printf("packet contains \"%s\"\n",buf);
/* 按原样送回客户端*/
if ((numbytes=sendto(sockfd, buf, numbytes, 0, (struct sockaddr *)&their_addr, sizeof(struct sockaddr))) == SOCKET_ERROR) {
PRINTERROR("sendto");
exit(1);
}
}
/* 关闭socket */
OS_SOCKET_CLOSE(sockfd);
OS_SOCKET_CLEAR() ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -