Server:
1 #include<iostream> 2 #include<sys/types.h> 3 #include<sys/socket.h> 4 #include<arpa/inet.h> 5 #include<unistd.h> 6 #include <errno.h> 7 #include<string.h> 8 9 #define PORT 10004 10 11 using namespace std; 12 13 void showError() 14 { 15 cout<<"Error : "<<strerror(errno)<<" Error code : "<<errno<<endl; 16 } 17 18 int main() 19 { 20 int ss,sc; 21 struct sockaddr_in server_addr,client_addr,peer_addr; 22 char conn_ip[INET_ADDRSTRLEN]; 23 int err; 24 ss=socket(AF_INET, SOCK_STREAM ,0); 25 if(ss<0){ 26 showError(); 27 return -1; 28 } 29 cout<<"Init Socket"<<endl; 30 31 bzero(&server_addr,sizeof(server_addr)); 32 server_addr.sin_family=AF_INET; 33 server_addr.sin_addr.s_addr = htonl(INADDR_ANY); 34 server_addr.sin_port=htons(PORT); 35 36 err=bind(ss,(struct sockaddr *)&server_addr,sizeof(server_addr)); 37 if(err<0){ 38 showError(); 39 return -1; 40 } 41 cout<<"Bind"<<endl; 42 43 err=listen(ss,2); 44 if(err<0){ 45 showError(); 46 return -1; 47 } 48 cout<<"Waiting for connect..."<<endl; 49 50 while(true){ 51 socklen_t addrlen=sizeof(struct sockaddr); 52 sc=accept(ss,(struct sockaddr*)&client_addr,&addrlen); 53 if(sc==-1){ 54 showError(); 55 continue; 56 } else { 57 int peer_len=sizeof(peer_addr); 58 getpeername(sc,(struct sockaddr *)&peer_addr,(socklen_t *)&peer_len); 59 cout<<"Connect from "<<inet_ntop(AF_INET,&peer_addr.sin_addr,conn_ip,sizeof(conn_ip))<<". : "<<ntohs(peer_addr.sin_port)<<endl; 60 ssize_t size=0; 61 char buffer[1024]; 62 while(true){ 63 size=read(sc,buffer,1024); 64 if(size<=0){ 65 showError(); 66 continue; 67 } 68 cout<<"Get message: "<<buffer<<endl; 69 cout<<"Send : "<<endl; 70 cin>>buffer; 71 write(sc,buffer,strlen(buffer)+1); 72 } 73 } 74 } 75 return 0; 76 }
Client:
1 #include<iostream> 2 #include<string.h> 3 #include<sys/types.h> 4 #include<sys/socket.h> 5 #include<arpa/inet.h> 6 #include<unistd.h> 7 8 #define PORT 10004 9 10 using namespace std; 11 12 int main(int argc,char *argv[]) 13 { 14 int s; 15 struct sockaddr_in server_addr; 16 17 s=socket(AF_INET,SOCK_STREAM,0); 18 if(s<0){ 19 cout<<"Init socket error"<<endl; 20 return -1; 21 } 22 bzero(&server_addr,sizeof(server_addr)); 23 server_addr.sin_family=AF_INET; 24 server_addr.sin_port=htons(PORT); 25 inet_pton(AF_INET, argv[1], &server_addr.sin_addr); 26 27 cout<<"Waiting for connect to "<<argv[1]<<"."<<endl; 28 29 while(true){ 30 int err=connect(s,(struct sockaddr*)&server_addr,sizeof(server_addr)); 31 if(err==-1){ 32 cout<<"Conn Error."<<endl; 33 } else { 34 ssize_t size=0; 35 char buffer[1024]; 36 while(true){ 37 cout<<"Send msg:"<<endl; 38 cin>>buffer; 39 write(s,buffer,strlen(buffer)+1); 40 size=read(s,buffer,1024); 41 cout<<"Message from server: "<<buffer<<endl; 42 } 43 } 44 } 45 return 0; 46 }