2023年3月13日作业

  1 #include<stdio.h>
  2 #include<sys/types.h>
  3 #include<sys/socket.h>
  4 #include<netinet/in.h>
  5 #include<netinet/ip.h>
  6 #include<string.h>
  7 #include<unistd.h>
  8 #include<arpa/inet.h>
  9 
 10 #define ERR_MSG(msg) do{\
 11     fprintf(stderr,"__%d__",__LINE__);\
 12     perror(msg);\
 13 }while(0);
 14 
 15 #define PORT 2222
 16 #define IP "192.168.31.52"
 17 
 18 int main(int argc, const char *argv[])
 19 {
 20     //创建套接字      socket
 21     int cfd=socket(AF_INET,SOCK_STREAM,0);
 22     if(cfd < 0)
 23     {
 24         ERR_MSG("socket");
 25         return -1;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
 26     }
 27     printf("socket creat success cfd = %d\n",cfd);
 28 
 29     //设置端口快速被重用
 30     int resue = 1;
 31     if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&resue,sizeof(resue)) < 0)
 32     {
 33         ERR_MSG("setsockopt");
 34         return -1;
 35     }
 36 
 37     //绑定IP和端口 
 38     //bind(man手册显示的是通用信息结构体)   真实地址结构体用man 7 ip查找
 39     //存储端口和ip
 40     struct sockaddr_in sin;
 41     sin.sin_family = AF_INET;          //地址族:必须填AF_INET
 42     sin.sin_port = htons(PORT);       //端口号:网络字节序
 43     sin.sin_addr.s_addr = inet_addr(IP); //IP号,网络字节序
 44     //绑定
 45     if(bind(cfd,(struct sockaddr*)&sin,sizeof(sin)) < 0)
 46     {
 47         ERR_MSG("bind");
 48         return -1;
 49     }
 50 
 51     //将套接字设置为被动监听状态 listen
 52     if(listen(cfd,128) < 0)
 53     {
 54         ERR_MSG("listen");
 55         return -1;
 56     }
 57 
 58 
 59     //获取连接成功后的套接字   accept
 60     //存储连接成功的客户端的地址信息
 61     struct sockaddr_in cin;
 62     socklen_t addrlen = sizeof(cin);
 63     int newfd = accept(cfd,(struct sockaddr*)&cin,&addrlen);
 64     if(newfd < 0)
 65     {
 66         ERR_MSG("accept");
 67         return -1;
 68     }
 69     //接受客户端的信息       recv
 70     char buf[128] = "";
 71     ssize_t res = -1;
 72     while(1)
 73     {
 74         bzero(buf,sizeof(buf));
 75         res = recv(newfd,buf,sizeof(buf),0);
 76         if(res < 0)
 77         {
 78             ERR_MSG("recv");
 79             return -1;
 80         }
 81         else if(0 == res)
 82         {
 83             fprintf(stderr,"客户端下线\n");
 84             break;
 85         }
 86         printf("%s\n",buf);
 87 
 88         //发送信息给客户端    recv
 89         if(send(newfd,buf,sizeof(buf),0) < 0)
 90         {
 91             ERR_MSG("send");
 92             return -1;
 93         }
 94         printf("send success\n");
 95     }
 96 
 97     //关闭套接字        close
 98     close(newfd);
 99 
100     return 0;
101 }
~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
~                                       
 #include<unistd.h>
  8 #include<arpa/inet.h>
  9 
 10 #define ERR_MSG(msg) do{\
 11     fprintf(stderr,"__%d__",__LINE__);\
 12     perror(msg);\
 13 }while(0);
 14 
 15 #define PORT1 2222    //服务器的端口和IP
 16 #define IP1 "192.168.31.52"
 17 
 18 #define PORT2 4444   //客户端的端口和IP
 19 #define IP2 "192.168.31.52"
 20 int main(int argc, const char *argv[]) 
 21 {
 22     //创建报式套接字      socket
 23     int sfd=socket(AF_INET,SOCK_STREAM,0);
 24     if(sfd < 0)
 25     {
 26         ERR_MSG("socket");
 27         return -1;
 28     }
 29     printf("socket creat success cfd = %d\n",sfd);
 30 
 31     struct sockaddr_in cin;
 32     cin.sin_family = AF_INET;
 33     cin.sin_port = htons(PORT2);
 34     cin.sin_addr.s_addr = inet_addr(IP2);
 35     //输入服务器的IP和端口 
 36     //bind(man手册显示的是通用信息结构体)   真实地址结构体用man 7 ip查找
 37     //存储端口和ip
 38     struct sockaddr_in sin;
 39     sin.sin_family = AF_INET;          //地址族:必须填AF_INET
 40     sin.sin_port = htons(PORT1);       //端口号:网络字节序
 41     sin.sin_addr.s_addr = inet_addr(IP1); //IP号,网络字节序
 42     //绑定
 43     if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin)) < 0)
 44     {
 45         ERR_MSG("bind");
 46         return -1;
 47     }
 48 
 49     //连接服务器     connect
 50     if(connect(sfd,(struct sockaddr*)&sin,sizeof(sin)) < 0)
 51     {
 52         ERR_MSG("connect");
 53         return -1;
 54     }
 55     socklen_t addrlen = sizeof(cin);
 56     char buf[128] = "";
 57     ssize_t res = -1;
 58     while(1)
 59     {
 60         bzero(buf,sizeof(buf));
 61         //接受数据
 62         res = recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&addrlen);
 63         if(res < 0)
 64         {
 65             ERR_MSG("recv");
 66             return -1;
 67         }
 68         printf("%s\n",buf);
 69 
 70         //发送信息给服务器   
 71         if(sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,sizeof(cin)) < 0)
 72         {
 73             ERR_MSG("sendto");
 74             return -1;
 75         }
 76         printf("send success\n");
 77     }
 78 
 79     //关闭套接字        close
 80     close(sfd);
 81     
 82     return 0;
 83 }
~                                                                                                                                                                                                                                                         
~                                                                                                                                                                                                                                                         
~                                     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

malingshu404

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值