zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    并行数据的并行转串行
    色彩空间转换仿真与模型搭建
    布隆过滤器介绍和在java中应用举例
    java9初探
    个人博客开通啦!
    MyBatis多租户隔离插件开发
    手动解析Excel获取文件元数据
    解决Shiro+SpringBoot自定义Filter不生效问题
    基于Redis的分布式锁实现
    解决tomcat同时部署两个SpringBoot应用提示InstanceAlreadyExistsException
  • 原文地址:https://www.cnblogs.com/HadesBlog/p/9805849.html
Copyright © 2011-2022 走看看