UDP简单实现并发服务器和客户端简单通信
以下程序均未做错误处理,以后有时间一定补上
客户端
#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[n] = '\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[n] = '\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;
}
还没有评论,来说两句吧...