1. 程式人生 > >Linux下cs簡單通訊(socket)

Linux下cs簡單通訊(socket)

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 }