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 }
原文地址:https://www.cnblogs.com/HadesBlog/p/9805849.html