69,382
社区成员
发帖
与我相关
我的任务
分享
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <errno.h>
main()
{
char str[INET_ADDRSTRLEN];
struct sockaddr_in devaddr;
socklen_t devaddr_len;
char Sendbuf[20];
int udpfd;
struct sockaddr_in servaddr;
char buf[3000];
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(8503);
if((udpfd = socket(AF_INET, SOCK_DGRAM, 0))==-1)
{
printf("create socket error: %s(errno: %d) \n",strerror(errno),errno);
exit(1);
}
if(bind(udpfd, (struct sockaddr *)&servaddr, sizeof(servaddr))==-1)
{
printf("listen socket error: %s(errno: %d) \n",strerror(errno),errno);
exit(1);
}
printf("Accepting UDP connections ...\n");
while(1)
{
devaddr_len = sizeof(devaddr);
int n = recvfrom(udpfd, buf, 3000, 0, (struct sockaddr *)&devaddr, &devaddr_len);
if (n == -1)
{
printf("recive data from device error: %s(errno: %d) \n",strerror(errno),errno);
exit(1);
}
printf("received from %s at PORT %d\n",
inet_ntop(AF_INET, &devaddr.sin_addr, str, sizeof(str)),
ntohs(devaddr.sin_port));
printf(" lenth of received data from device is: %d \n",n);
memset(Sendbuf, 0, 20);
Sendbuf[0] = 19;
Sendbuf[1] = 85;
Sendbuf[2] = 6;
Sendbuf[3] = 0 ;
Sendbuf[4] =1 ;
int send5 = sendto(udpfd,Sendbuf,20,0,(struct sockaddr *)&devaddr,sizeof(devaddr));
if (send5 == -1)
{
printf("发送回复包失败: %s(errno: %d) \n",strerror(errno),errno);
exit(1);
}
else
printf("回复包长度: %d\n",send5);
}
}