您的位置:首页 > 运维架构 > Linux

UDP简单实现并发服务器和客户端简单通信

2016-12-05 22:20 549 查看
以下程序均未做错误处理,以后有时间一定补上

客户端

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <sys/socket.h>

int main(int argc,char **argv)
{
int sockfd;
int n;
struct sockaddr_in servaddr;
char readbuf[1000];
char sendbuf[1000];

sockfd = socket(AF_INET,SOCK_DGRAM,0);
bzero(&servaddr,sizeof(servaddr));

servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr(argv[1]);
servaddr.sin_port = htons(3200);

while(fgets(sendbuf,1000,stdin) != NULL)
{
sendto(sockfd,sendbuf,strlen(sendbuf),0,(struct sockaddr *)&servaddr,sizeof(servaddr));
n = recvfrom(sockfd,readbuf,1000,0,NULL,NULL);

readbuf
= '\0';
fputs(readbuf,stdout);
}

close(sockfd);

return 0;
}

服务器

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <sys/socket.h>

void strlwr(char *str)
{
char *p;
p = str;

while(*p != '\0')
{
if((*p >= 'a') && (*p <= 'z'))
{
*p -= 32;
}

p++;
}
}

int main()
{
int sockfd;
int n;
struct sockaddr_in servaddr,cliaddr;
char mesg[1000];
socklen_t clilen;

sockfd = socket(AF_INET,SOCK_DGRAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(3200);

bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr));

clilen = sizeof(cliaddr);

for(;;)
{
for(;;)
{
n = recvfrom(sockfd,mesg,1000,0,(struct sockaddr*)&cliaddr,&clilen);

if(n == 0)
{
printf("client closed");
exit(-1);
}

printf("******************\n");
mesg
= '\0';
printf("%s\n",mesg);
printf("*******************\n");

strlwr(mesg);

sendto(sockfd,mesg,n,0,(struct sockaddr*)&cliaddr,sizeof(cliaddr));
}

//close(sockfd);
}

close(sockfd);

return 0;
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  udp 通信 linux c语言 并发