client.c
#include<errno.h>
#include<semaphore.h>
#include<string.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<errno.h>
#include<stdlib.h>
#include<unistd.h>
#include<stdio.h>
#include<sys/mman.h>
#include<sys/types.h>
#include<signal.h>
#include<pthread.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#define SERVER_PORT 8000
#define MAXLINE 4096
int main(){
struct sockaddr_in serveraddr;
int confd,len;
char ipstr[]="192.168.133.129";
char buf[MAXLINE]="abcdef";
confd=socket(AF_INET,SOCK_STREAM,0);
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family=AF_INET;
inet_pton(AF_INET,ipstr,&serveraddr.sin_addr.s_addr);
serveraddr.sin_port=htons(SERVER_PORT);
connect(confd,(struct sockaddr*)&serveraddr,sizeof(serveraddr));
// while(fgets(buf,sizeof(buf),stdin)){
write(confd,buf,strlen(buf));
len=read(confd,buf,sizeof(buf));
write(STDOUT_FILENO,buf,len);
// }
close(confd);
return 0;
}
server.c
#include<errno.h>
#include<semaphore.h>
#include<string.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<errno.h>
#include<stdlib.h>
#include<unistd.h>
#include<stdio.h>
#include<sys/mman.h>
#include<sys/types.h>
#include<signal.h>
#include<pthread.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#define SERVER_PORT 8000
#define MAXLINE 80
struct s_info{
struct sockaddr_in clientaddr;
int connfd;
};
void* do_work(void* arg){
int n,i;
char ipstr[80];
char buf[MAXLINE];
struct s_info* ts=(struct s_info*)arg;
pthread_detach(pthread_self());
while(1){
n=read(ts->connfd,buf,MAXLINE);
if(n==0){
printf("the other side has been closed.\n");
break;
}
inet_ntop(AF_INET,&ts->clientaddr.sin_addr.s_addr,ipstr,sizeof(ipstr));
printf("client ip %s\nport %d\n",ipstr,ntohs(ts->clientaddr.sin_port));
i=0;
while(i<n){
buf[i]=toupper(buf[i]);
i++;
}
write(ts->connfd,buf,n);
}
close(ts->connfd);
}
int main(){
struct sockaddr_in serveraddr,clientaddr;
socklen_t clientaddr_len;
int sockfd,connfd;
int i=0;
pthread_t tid;
struct s_info ts[383];
sockfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family=AF_INET;
serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
serveraddr.sin_port=htons(SERVER_PORT);
bind(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr));
listen(sockfd,20);
while(1){
clientaddr_len=sizeof(clientaddr);
connfd=accept(sockfd,(struct sockaddr*)&clientaddr,&clientaddr_len);
ts[i].clientaddr=clientaddr;
ts[i].connfd=connfd;
pthread_create(&tid,NULL,do_work,(void*)&ts[i]);
i++;
}
close(sockfd);
return 0;
}