Client
//client.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MAXNUM 100
#define SERV_PORT 1385
int main(int argc, char *argv[]){
//parse arg
if (argc!=2) {
printf("usage: ./client IP address\n");
exit(1);
}
struct sockaddr_in servaddr;
char buf[MAXNUM];
int sock,n;
//create socket
sock=socket(AF_INET, SOCK_STREAM, 0);
//set IP & Port
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);//the htons function converts the unsigned short integer hostshort from host byte order to network byte order
if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr)<=0){//argv[1]->src,&sin_addr->dst
printf("Invalid IP address\n");
exit(1);
};
//connect
if(connect(sock,(struct sockaddr *)&servaddr,sizeof(servaddr))<0){
printf("Error:cannot connect server\n");
};
//send
fgets(buf,MAXNUM,stdin);
while(strcmp(buf,"--\n")!=0){//to figure out input valid
write(sock,buf,MAXNUM);
n=read(sock, buf, MAXNUM);
printf("%s\n",buf);
//communicate with the server in turn
fgets(buf,MAXNUM,stdin);
}
//disconnet
printf("Client Shutting Down...\n");
close(sock);
return 0;
}
Server
//server.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define MAXNUM 100
#define SERV_PORT 1385//My student ID is 004381385
int main(int argc,char* argv[]){
//parse arg
if(argc!=1){
printf("Usage:./server\n");
exit(1);
}
int welcome,connect;
struct sockaddr_in servaddr,cliaddr;
int cliaddrlen;
char buf[MAXNUM];
char temp[MAXNUM];
int i,j,n;
//create socket
welcome=socket(AF_INET,SOCK_STREAM,0);
if(welcome<0){
printf("Error:cannot creat socket\n");
exit(1);
}
//set address
bzero(&servaddr, sizeof(servaddr));//memory set
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//any local IP
servaddr.sin_port = htons(SERV_PORT);
//bind
if(bind(welcome, (struct sockaddr *)&servaddr, sizeof(servaddr))<0){
printf("Error:cannot bind socket\n");
exit(1);
};
//listen
if(listen(welcome,5)<0){
printf("Error:cannot listen\n");
exit(1);
}
while (1) {//do forever
printf("Listenning %d\tpress CTRL+C to quit\n",
ntohs(servaddr.sin_port));
cliaddrlen=sizeof(cliaddr);
//accept the requirement
connect=accept(welcome,
(struct sockaddr *)&cliaddr, &cliaddrlen);
if(connect<0){
printf("Error:cannot accept\n");
exit(1);
}
//read
n=read(connect,buf,MAXNUM);
printf ("processing client %s:%d\n",
inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));
while(n>0){//to figure out if input from client valid
//string conversion
if(buf[0]=='^'){
for(i=0,j=strlen(buf)-1;j>1;i++,j--){
temp[i]=buf[j-1];
if(temp[i]>='a'&&temp[i]<='z')
temp[i]-=32;
else if(temp[i]>='A'&&temp[i]<='Z')
temp[i]+=32;
}
}
else for(i=0,j=strlen(buf)-1;j>=0;i++,j--)
temp[i]=buf[j-1];
strcpy(buf,temp);
memset(temp,0,sizeof(temp));//memory set
write(connect,buf,n);
//communicate with the client in turn
n = read(connect,buf,MAXNUM);
};
//disconnect socket
close(connect);
return 0;
}
}