network-day2

 tcp通信

服务器端:

  1 #include <head.h>
  2 
  3 
  4 #define PORT 9999   //服务器端口号,是2字节整数
  5 #define IP "192.168.125.22"    //服务器ip地址
  6 int main(int argc, const char *argv[])
  7 {
  8     //1.创建套接字
  9     int sfd=-1;
 10     //功能:创建一个支持TCP通信的套接字
 11     //socket(通信域,通信类型,通信协议)
 12     if ((sfd=socket(AF_INET,SOCK_STREAM,0))==-1)
 13     {
 14         perror("socket error");
 15         return -1;
 16     }
 17     printf("sfd=%d\n",sfd);//如果是服务器端,这个描述符用于服务器和客户端连接
 18     //2.绑定地址信息结构体
 19     //2.1填充地址信息结构体
 20     struct sockaddr_in sin;
 21     sin.sin_family=AF_INET;//地址组
 22     sin.sin_port=htons(PORT);//端口号
 23     sin.sin_addr.s_addr=inet_addr(IP);//IP地址
 24     //2.2绑定工作
 25     //bind(套接字文件描述符,通用地址信息结构体,地址信息结构体的大小)
 26     if (bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
 27     {
 28         perror("bind error");
 29         return -1;
 30     }
 31     printf("bind success_%d_%s_%s\n",__LINE__,__FILE__,__func__);
 32     //3.将套接字设置成被动监听状态
 33     //listen(套接字文件描述符,未连接队列的最大长度,一般128)
 34     if (listen(sfd,128)==-1)
 35     {
 36         perror("listen error");
 37         return -1;
 38     }
 39     printf("listen success_%d_%s_%s\n",__LINE__,__FILE__,__func__);
 40     //4.接收客户端连接请求
 41     //4.1定义用于接收客户端地址信息的结构体变量
 42     struct sockaddr_in cin;
 43     //接收长度
 44     socklen_t socklen=sizeof(cin);
 45     int newfd=-1;//定义一个用于跟客户端通信的套接字文件描述符
 46     //4.2接受客户端链接请求
 47     //返回值是用于连接的文件描述符=accept(套接字文件描述符,客户端地址信息结构体变量指针,接收的长度)
 48     if ((newfd=accept(sfd,(struct sockaddr*)&cin,&socklen))==-1)
 49     {
 50         perror("accept error");
 51         return -1;
 52     }
 53     //这里ip地址和端口号分别是%s和%d输出
 54     //将ip地址的网络字节序转换为点分十进制
 55     //将端口号的网络字节序转换为主机字节序
 56     printf("[%s,%d]连接成功,newfd=%d\n",inet_ntoa(cin.sin_addr),\
 57             ntohs(cin.sin_port),newfd);
 58     //5.收发数据
 59 
 60     char rbuf[128]="";//读取消息的容器
 61     while(1)
 62     {
 63         //将数组清0
 64         bzero(rbuf,sizeof(rbuf));
 65         //从客户端读取数据recv
 66         //recv(用于通信的文件描述符,容器首地址,容器的大小,0是阻塞读取)
 67         int res=recv(newfd,rbuf,sizeof(rbuf),0);
 68         if (res==0)//读完了
 69         {
 70             printf("客户端下线\n");
 71             break;
 72         }
 73         //客户端说了什么
 74         printf("[%s,%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),rbuf);
 75     //服务器收到客户端的消息,加一个*_*返给服务器
 76     strcat(rbuf,"*_*");
 77     //向newfd描述符中以阻塞的形式发送数据
 78     send(newfd,rbuf,sizeof(rbuf),0);
 79 
 80     }
 81     //关闭套接字文件描述符
 82     close(sfd);
 83     close(newfd);
 84     return 0;
 85 }
~                                                                                                                                                                                                                                                                                                     
~                                                                                                                                                                                                                                                                                                     
~                                                                                                                                                                                                                                                                                                     
~                                                                                                                                                                                                                                                                                                     
~                                                                                                                                                                                                                                                                                                     
~                                                                                                                                                                                                                                                                                                     
~                                                                                                                                                                                                                                                                                                     
~                                                                                                                                                                                                                                                                                                     
~                                                                                                                                                                                                                                                                                                     
~                                                                                                                                                                                                                                                                                                     
~                                                                                                                                                                                                                                                                                                     
~                                 

 客户端

  1 #include <head.h>
  2 #define CLIPORT 8888   //客户端端口号
  3 #define CLIIP "192.168.125.22"  //客户端ip地址
  4 
  5 #define SERPORT 9999   //服务器端口号,是2字节整数
  6 #define SERIP "192.168.125.22"    //服务器ip地址
  7 int main(int argc, const char *argv[])
  8 {
  9     //1.创建套接字
 10     int cfd=-1;
 11     //功能:创建一个支持TCP通信的套接字
 12     //socket(通信域,通信类型,通信协议)
 13     if ((cfd=socket(AF_INET,SOCK_STREAM,0))==-1)
 14     {
 15         perror("socket error");
 16         return -1;
 17     }
 18     printf("cfd=%d\n",cfd);//如果是客户端,这个描述符用于服务器和客户端通信
 19     //将端口号快速重用
 20     int reuse=-1;
 21     if (setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))==-1)
 22     {
 23         perror("reuse error");
 24         return -1;
 25     }
 26     //2.绑定地址信息结构体(非必须绑定)
 27     //2.1填充客户端地址信息结构体
 28     struct sockaddr_in cin;
 29     cin.sin_family=AF_INET;//地址组
 30     cin.sin_port=htons(CLIPORT);//端口号
 31     cin.sin_addr.s_addr=inet_addr(CLIIP);//IP地址
 32     //2.2绑定工作
 33     //bind(套接字文件描述符,通用地址信息结构体,地址信息结构体的大小)
 34     if (bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1)
 35     {
 36         perror("bind error");
 37         return -1;
 38     }
 39     printf("bind success_%d_%s_%s\n",__LINE__,__FILE__,__func__);
 40     //3.请求连接服务器
 41     //3.1填充服务器端地址信息结构体
 42     struct sockaddr_in sin;
 43     sin.sin_family=AF_INET;//地址组
 44     sin.sin_port=htons(SERPORT);//端口号
 45     sin.sin_addr.s_addr=inet_addr(SERIP);//IP地址
 46     //3.2连接服务器
 47     if (connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
 48     {
 49         perror("connect error");
 50         return -1;
 51     }
 52     printf("connect success_%d_%s_%s\n",__LINE__,__FILE__,__func__);
 53     //4.收发数据
 54     char wbuf[128]="";
 55     while(1)
 56     {
 57         //将数组清0
 58         bzero(wbuf,sizeof(wbuf));
 59         //输入内容
 60         fgets(wbuf,sizeof(wbuf),stdin);//从终端获取
 61         wbuf[strlen(wbuf)-1]=0;
 62 
 63         //将数据传给服务器
 64         send(cfd,wbuf,sizeof(wbuf),0);
 65         //接收服务器发来的消息
 66         bzero(wbuf,sizeof(wbuf));
 67         //recv(用于通信的文件描述符,容器首地址,容器的大小,0是非阻塞读取)
 68         int res=recv(cfd,wbuf,sizeof(wbuf),0);
 69         if (res==0)//读完了
 70         {
 71             printf("服务器端下线\n");
 72             break;
 73         }
 74         //服务器端说了什么
 75         printf("[%s,%d]:%s\n",SERIP,SERPORT,wbuf);  
 76     }
 77     //关闭套接字文件描述符
 78     close(cfd);
 79     return 0;
 80 }                                                                                                                                                                                                                                                
~                                                                                                                                                                                                                                                    
~                                                                                                                                                                                                                                                    
~                                                                                                                                                                                                                                                    
~                                                                                                                                                                                                                                                    
~                                                                                                                                                                                                                                                    
~                                                                                                                                                                                                                                                    
~                                                                                                                                                                                                                                                    
~                                                                                                                                                                                                                                                    
~             

udp通信

服务器端:

  1 #include <head.h>
  2 #define PORT 8888
  3 #define IP "192.168.125.22"
  4 int main(int argc, const char *argv[])
  5 {
  6     //1.创建通信套接字
  7     int sfd=-1;
  8     if ((sfd=socket(AF_INET,SOCK_DGRAM,0))==-1)
  9     {
 10         perror("socket eror");
 11         return -1;
 12     }
 13     //2.绑定
 14     struct sockaddr_in sin;
 15     sin.sin_family=AF_INET;
 16     sin.sin_port=htons(PORT);
 17     sin.sin_addr.s_addr=inet_addr(IP);
 18     if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
 19     {
 20         perror("bind error");
 21         return -1;
 22     }
 23     printf("bind success\n");
 24     //3.收发数据
 25     //创建客户端的地址信息结构体
 26     struct sockaddr_in cin;
 27     //接收长度
 28     socklen_t socklen=sizeof(cin);
 29     char buf[128]="";
 30     while(1)
 31     { 
 32         bzero(buf,sizeof(buf));
 33         recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&socklen);
 34         printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);
 35         strcat(buf,"*_*");
 36         sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,sizeof(cin));
 37     }
 38 
 39     return 0;
 40 }                                                                                                                                                                                   
~                                                                                                                                                                                       
~                                                                                                                                                                                       
~                                                                                                                                                                                       
~                                                                                                                                                                                       
~                                                                                                                                                                                       
~                    

 客户端:

  1 #include <head.h>
  2 #define PORT 8888
  3 #define IP "192.168.125.22"
  4 int main(int argc, const char *argv[])
  5 {
  6     int cfd=-1;
  7     if((cfd=socket(AF_INET,SOCK_DGRAM,0))==-1)
  8     {
  9         perror("socket error");
 10         return -1;
 11     }
 12     struct sockaddr_in sin;
 13     sin.sin_family=AF_INET;
 14     sin.sin_port=htons(PORT);
 15     sin.sin_addr.s_addr=inet_addr(IP);
 16     socklen_t socklen=sizeof(sin);
 17     char buf[128]="";
 18     while (1)
 19     {
 20         bzero(buf,sizeof(buf));
 21         fgets(buf,sizeof(buf),stdin);
 22         buf[strlen(buf)-1]=0;
 23         sendto(cfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,socklen);
 24         recv(cfd,buf,sizeof(buf),0);
 25         printf("[%s:%d]:%s\n",IP,PORT,buf);
 26     }
 27     return 0;                                                                     
 28 }
~                                                                                     
~                                                                                     
~         

network-day2 - 幕布

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值