以下程序均未做错误处理,等有时间一定完善
客户端
#include <stdio.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <string.h>
int main(int argc,char **argv)
{
int sockfd;
int n;
struct sockaddr_in servaddr,cliaddr;
char sendbuf[1000];
char recvbuf[1000];
if(argc != 2)
{
printf("usage:client <ip address>\n");
exit(-1);
}
sockfd = socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr(argv[1]);
servaddr.sin_port = htons(3200);
connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
while(fgets(sendbuf,1000,stdin) != NULL)
{
sendto(sockfd,sendbuf,strlen(sendbuf),0,(struct sockaddr *)&servaddr,sizeof(servaddr));
n = recvfrom(sockfd,recvbuf,1000,0,NULL,NULL);//(struct sockaddr*)&cliaddr,
recvbuf[n] = '\0';
fputs(recvbuf,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()
{
pid_t pid;
int listenfd,connfd;
int n;
struct sockaddr_in servaddr,cliaddr;
socklen_t clilen;
char mesg[1000];
listenfd = socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(3200);
int opt = 1;
setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
listen(listenfd,1024);
for(;;)
{
clilen = sizeof(cliaddr);
connfd = accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);
if((pid = fork()) == 0)
{
close(listenfd);
for(;;)
{
n = recvfrom(connfd,mesg,1000,0,(struct sockaddr*)&cliaddr,&clilen);
if(n == 0)
{
printf("client closed!\n");
exit(-1);
}
printf("********************\n");
mesg[n] = '\0';
printf("%s\n",mesg);
printf("*********************\n");
strlwr(mesg);
sendto(connfd,mesg,n,0,(struct sockaddr *)&cliaddr,sizeof(cliaddr));
}
close(connfd);
}
}
close(listenfd);
return 0;
}