Talk is cheap,show me the code
server.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define MAXLINE 255
int main(int argc,char** argv)
{
int lis_fd,con_fd;
struct sockaddr_in serv_addr,clit_addr;
socklen_t clit_len;
char buf[MAXLINE]={0};
int i,n,port;
if(argc<3){
printf("please fill the parameter\n");
return 1;
}
if(-1 == (lis_fd=socket(AF_INET,SOCK_STREAM,0))){
perror("socket error\n");
exit(1);
}
bzero(&serv_addr,sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=inet_addr(argv[1]);
port=atoi(argv[2]);
serv_addr.sin_port=htons(port);
if(-1==bind(lis_fd,(struct sockaddr*)&serv_addr,sizeof(struct sockaddr))){
perror("bind error\n");
exit(1);
}
if(listen(lis_fd,10)==-1){
perror("listen error\n");
exit(1);
}
printf("========waiting for client's request===========\n");
clit_len=sizeof(struct sockaddr_in);
if(-1==(con_fd=accept(lis_fd,(struct sockaddr*)&clit_addr,&clit_len))){
perror("accept error\n");
exit(1);
}
printf("connect from %s:%u...!\n",inet_ntoa(clit_addr.sin_addr),ntohs(clit_addr.sin_port));
while(1){
memset(buf,0,MAXLINE);
if((n=recv(con_fd,buf,MAXLINE,0))==0){
sleep(1);
continue;
}
buf[n]=0;
printf("recv msg from client: %s\n",buf);
if(0 == strncmp(buf,"quit",4)){
break;
}
if(0 == strncmp(buf,"send",4)){
memset(buf,0,MAXLINE);
scanf("%s",&buf);
send(con_fd,buf,strlen(buf),0);
}
}
close(con_fd);
close(lis_fd);
exit(0);
}
client.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define MAXLINE 255
int main(int argc,char** argv)
{
int sockfd,n,rec_len,port;
char recvline[MAXLINE],sendline[MAXLINE];
struct sockaddr_in conn_addr;
if(argc<3){
printf("please fill the parameter\n");
return 1;
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0){
perror("socket error\n");
exit(1);
}
bzero(&conn_addr,sizeof(conn_addr));
conn_addr.sin_family=AF_INET;
port=atoi(argv[2]);
conn_addr.sin_port=htons(port);
conn_addr.sin_addr.s_addr=inet_addr(argv[1]);
if(connect(sockfd,(struct sockaddr*)&conn_addr,sizeof(conn_addr))<0){
printf("connect error: %s(error: %d)\n",strerror(errno),errno);
exit(1);
}
printf("send msg to server: \n");
while(1){
memset(sendline,0,MAXLINE);
fgets(sendline,MAXLINE,stdin);
if(send(sockfd,sendline,strlen(sendline),0)<0){
printf("send error\n");
exit(1);
}
memset(recvline,0,MAXLINE);
if((rec_len=recv(sockfd,recvline,MAXLINE,0))==-1){
printf("recv error\n");
exit(1);
}
recvline[rec_len]='\0';
if(0 == strncmp(recvline,"quit",4)) break;
printf("Received: %s\n",recvline);
}
close(sockfd);
return 0;
}