您的位置:首页 > 其它

UDP协议服务器、客户端使用实例Demo

2017-07-29 12:16 417 查看
服务器:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h>

#define MAXSIZE     512
#define SERVER_PORT 12355
#define SEND_PORT   12377

int main()
{
struct sockaddr_in server_addr, client_addr;
socklen_t client_addr_len;
char buff[MAXSIZE];
char ip[INET_ADDRSTRLEN];
int i, len;
/*创建socket*/
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
/*设置广播属性*/
int on = 1;
setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));
/*绑定端口号*/
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(SERVER_PORT);
bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));
printf("Udp Server Start ...\n");
while(1)
{
/*接收客户端信息*/
client_addr_len = sizeof(client_addr);
len = recvfrom(sockfd, buff, MAXSIZE, 0, (struct sockaddr*)&client_addr, &client_addr_len);
if(len == -1)
{
printf("recvfrom error\n");
}
/*打印客户端ip,port*/
inet_ntop(AF_INET, &client_addr.sin_addr, ip, sizeof(ip));
int rcv_port = ntohs(client_addr.sin_port);
printf("Received info from %s at PORT %d\n",ip,rcv_port);
for(i = 0; i < len; i++)
{
buff[i] = toupper(buff[i]);
}
/*设置发送端口*/
client_addr.sin_port = htons(SEND_PORT);
/*发送信息到客户端*/
len = sendto(sockfd, buff, len, 0, (struct sockaddr*)&client_addr, sizeof(client_addr));
if(len == -1)
{
printf("sendto error!\n");
}
}
close(sockfd);
return 0;
}


客户端:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define MAXSIZE     512
#define SERVER_PORT 12355
#define RECV_PORT   12377
#define IP "255.255.255.255"

int main(int argc, char* argv[])
{
char buff[MAXSIZE];
/*创建socket,设置广播属性*/
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
int on = 1;
setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));
/*绑定接收端口*/
struct sockaddr_in rcv_addr;
bzero(&rcv_addr, sizeof(rcv_addr));
rcv_addr.sin_family = AF_INET;
inet_pton(AF_INET, "127.0.0.1", &rcv_addr.sin_addr);
rcv_addr.sin_port = htons(RECV_PORT);
bind(sockfd,(struct sockaddr*)&rcv_addr,sizeof(rcv_addr));
/*设置发送到服务器的IP,端口等信息*/
struct sockaddr_in server_addr;
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
inet_pton(AF_INET, IP, &server_addr.sin_addr);
server_addr.sin_port = htons(SERVER_PORT);
printf("Udp Client Start....\n");
while(fgets(buff, MAXSIZE, stdin) != NULL)
{
/*发送信息到服务器*/
int ret = sendto(sockfd, buff, strlen(buff), 0, (struct sockaddr*)&server_addr, sizeof(server_addr));
if(-1 == ret)
{
printf("sendto error!\n");
}
/*接收服务器返回信息*/
ret = recvfrom(sockfd, buff, MAXSIZE, 0, NULL, 0);
if(-1 == ret)
{
printf("recvfrom error!\n");
}
write(STDOUT_FILENO, buff, ret);
}
close(sockfd);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: