UDP/TCP模型搭建

UDP服务器
  1 #include <stdio.h>
  2 #include <myhead.h>
  3 
  4 #define PORT 8888 //1024-49251
  5 #define IP  "192.168.124.17" //ifconfig查找本机的Ip地址
  6 int main(int argc, const char *argv[])
  7 {
  8 
  9     //创建报式套接字
 10     int sfd = socket(AF_INET,SOCK_DGRAM,0);
 11     if(sfd<0)
 12     {
 13         fprintf(stderr,"line:%d",__LINE__);
 14         perror("socket");
 15         return -1;
 16     }
 17     printf("创建报式套接字成功 sfd = %d __%d__\n",sfd,__LINE__);
 18     //允许端口号被快速重复使用
 19     int reuse = 1;
 20     if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
 21     {
 22         fprintf(stderr,"line:%d",__LINE__);
 23         perror("setsockopt");
 24         return -1;
 25 
 26     }
 27     //填充服务器的地址信息结构体,真实的地址信息结构体根据地址族判定
 28     //AF_INET --->man 7 ip
 29     struct sockaddr_in sin;
 30     sin.sin_family   = AF_INET;     //必须填AF_INET(PIV4)
 31     sin.sin_port     = htons(PORT); //端口号的网络字节序
 32     sin.sin_addr.s_addr = inet_addr(IP);//服务器要运行的主机的IP的网络地址
 33     //ifconfig查找本机的IP地址
 34     //绑定服务器自身的地址信息--->必须绑定
 35     if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))<0)
 36     {
 37     
 38         fprintf(stderr,"line:%d",__LINE__);
 39         perror("bind");
 40         return -1;
 41     }
 42     printf("bind success __%d__\n",__LINE__);
 43 
 44     
 45     
 46     char buf[128] = "";//存储数据包发送方的地址信息
 47     struct sockaddr_in cin;
 48     socklen_t addrlen = sizeof(cin);
 49     while(1)
 50     {
 51         bzero(buf,sizeof(buf));
 52         //接收
 53         if(recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&addrlen)<0)
 54         {
 55 
 56 
 57             fprintf(stderr,"line:%d",__LINE__);
 58             perror("recvfrom");
 59             return -1;
 60 
 61         }
 62         printf("[%s:%d] : %s __%d__\n",inet_ntoa(cin.sin_addr),\
 63                 htons(cin.sin_port),buf,__LINE__);
 64 
 65         //发送
 66         strcat(buf,"*_*");
 67         if(sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,sizeof(cin))<0)
 68         {
 69 
 70             fprintf(stderr,"line:%d",__LINE__);
 71             perror("sendto");
 72             return -1;
 73 
 74         }
 75     printf("发送成功\n");
 76 
 77     }
 78     //关闭
 79     close(sfd);
 80     return 0;
 81 
 82 }                                                                                             
~                                                                                                 
~                                                                                                 
~                                                                                                 
~                                                                                                 
UDP客服端
  1 #include <stdio.h>
  2 #include <myhead.h>
  3 
  4 #define SER_PORT 8888 // 接收方的端口
  5 #define SER_IP  "192.168.124.17" // 接收方的IP
  6 
  7 #define CLI_PORT 6666
  8 #define CLI_IP  "192.168.124.17"
  9 
 10 int main(int argc, const char *argv[])
 11 {
 12 
 13     //创建报式套接字
 14     int cfd = socket(AF_INET,SOCK_DGRAM,0);
 15     if(cfd<0)
 16     {
 17         fprintf(stderr,"line:%d",__LINE__);
 18         perror("socket");
 19         return -1;
 20     }
 21     printf("创建报式套接字成功 sfd = %d __%d__\n",cfd,__LINE__);
 22     //绑定客服端自身地址信息结构体-->非必须绑定
 23     //若不绑定,则操作系统会自动给客服端所运行主机的IP及随机端口:49152~65535
 24     以下绑定客户端的地址,可以不写///
 25     //允许端口号被快速重复使用
 26     int reuse = 1;
 27     if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
 28     {
 29         fprintf(stderr,"line:%d",__LINE__);
 30         perror("setsockopt");
 31         return -1;
 32 
 33     }
 34     //填充客户端自身的地址信息
 35     //AF_INET --->man 7 ip
 36     struct sockaddr_in cin;
 37     cin.sin_family   = AF_INET;     //必须填AF_INET(PIV4)
 38     cin.sin_port     = htons(CLI_PORT); //客户端需要绑定的端口号1024~49151
 39     cin.sin_addr.s_addr = inet_addr(CLI_IP);//客户端需要绑定的IP
 40     //ifconfig查找本机的IP地址
 41     //绑定服务器自身的地址信息--->必须绑定
 42     if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))<0)
 43     {
 44 
 45         fprintf(stderr,"line:%d",__LINE__);
 46         perror("bind");
 47         return -1;
 48     }
 49     printf("bind [%s:%d]success __%d__\n",CLI_IP,CLI_PORT,__LINE__);
 50     
 51 
 52     //填充服务器的地址信息结构体,给sendto函数使用
 53     //指定要将数据包发送给谁
 54     //AF_INET ---> man 7 ip
 55     struct sockaddr_in sin;
 56     sin.sin_family   = AF_INET;     //必须填AF_INET(PIV4)
 57     sin.sin_port     = htons(SER_PORT); //服务器绑定的端口号
 58     sin.sin_addr.s_addr = inet_addr(SER_IP);//服务器绑定的IP
 59 
 60     char buf[128] = "";
 61     struct sockaddr_in rcvaddr;//存储数据包发送方的地址信息
 62     socklen_t addrlen = sizeof(rcvaddr);
 63     while(1)
 64     {
 65         bzero(buf,sizeof(buf));
 66         //发送
 67         printf("请输入》》");
 68         fgets(buf,sizeof(buf),stdin);
 69         buf[strlen(buf)-1]='\0';
 70 
 71         if(sendto(cfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,sizeof(sin))<0)
 72         {
 73 
 74             fprintf(stderr,"line:%d",__LINE__);
 75             perror("sendto");
 76             return -1;
 77 
 78         }
 79         printf("发送成功\n");
 80         bzero(buf,sizeof(buf));
 81 
 82         //接收
 83         if(recvfrom(cfd,buf,sizeof(buf),0,(struct sockaddr*)&rcvaddr,&addrlen)<0)
 84         {
 85 
 86 
 87             fprintf(stderr,"line:%d",__LINE__);
 88             perror("recvfrom");
 89             return -1;
 90 
 91         }
 92         printf("[%s:%d] : %s __%d__\n",inet_ntoa(rcvaddr.sin_addr),\                                                      
 93                 htons(rcvaddr.sin_port),buf,__LINE__);
 94 
 95 
 96     }
 97     //关闭
 98     close(cfd);
 99     return 0;
100 
101 }
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             

现象


TCP服务器
  1 #include <stdio.h>
  2 #include <myhead.h>
  3 
  4 #define PORT 9999     //1024~49151
  5 #define IP "192.168.124.17"//ifconfig查找本机的IP地址
  6 
  7 
  8 
  9 int main(int argc, const char *argv[])
 10 {
 11 
 12     //创建流式套接字文件
 13 
 14     int sfd = socket(AF_INET,SOCK_STREAM,0);
 15     if(sfd <0)
 16     {
 17         fprintf(stderr,"line:%d",__LINE__);
 18         perror("socket");
 19         return -1;
 20     }
 21     printf("创建流式套接字文件成功 sfd=%d __%d__\n",sfd,__LINE__);
 22 
 23     //允许端口号被快速重复使用
 24     int reuse = 1;
 25     if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
 26     {
 27         fprintf(stderr,"line:%d",__LINE__);
 28         perror("setsockopt");
 29         return -1;
 30 
 31     }
 32 
 33     //填充服务器的地址信息结构体,真实的地址信息结构体根据地址族制定
 34     //AF_INET --->man 7 ip
 35     struct sockaddr_in sin;
 36     sin.sin_family = AF_INET;//必须填AF_INET;
 37     sin.sin_port = htons(PORT);//端口号的网络字节序
 38     sin.sin_addr.s_addr = inet_addr(IP);
 39     //绑定服务器自身的地址信息--》必须绑定
 40     if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))<0)
 41     {
 42         fprintf(stderr,"line:%d",__LINE__);
 43         perror("bind");
 44         return -1;
 45     }
 46     printf("bind success __%d__\n",__LINE__);
 47     //将套接字设置为被动监听状态
 48     if(listen(sfd,128)<0)
 49     {
 50         fprintf(stderr,"line:%d",__LINE__);
 51         perror("listen");
 52         return -1;
 53     }
 54     printf("listen success __%d__\n",__LINE__);
 55 
 56     struct sockaddr_in cin;//存储客服端信息的
 57     socklen_t addrlen = sizeof(cin);
 58     //会从已完成连接队列的对头获取一个客户端的信息,生成一个新的文件描述符
 59     //accept(sfd,NULL,NULL);
 60     int newfd = accept(sfd,(struct sockaddr*)&cin,&addrlen);
 61     if(newfd <0)
 62     {
 63         fprintf(stderr,"line:%d",__LINE__);
 64         perror("accept");
 65         return -1;
 66     }
 67 
 68     printf("[%s:%d] 客服端连接成功 newfd=%d __%d__\n",\
 69             inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,__LINE__);
 70     char buf[128];
 71     ssize_t res;
 72     while(1)
 73     {
 74         bzero(buf,sizeof(buf));
 75 
 76         //接收
 77         res = recv(newfd,buf,sizeof(buf),0);
 78         if(res<0)
 79         {
 80 
 81 
 82             fprintf(stderr,"line:%d",__LINE__);
 83             perror("recv");
 84             return -1;
 85         }
 86         else if(0==res)
 87         {
 88             printf("客服端下线 __%d__",__LINE__);
 89             break;
 90         }
 91         printf("[%s:%d] 客服端连接成功 newfd=%d __%d__\n",\
 92                 inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,__LINE__);
 93 
 94 
 95 
 96         //发送
 97         strcat(buf,"*~*");
 98         if( send(newfd,buf,sizeof(buf),0)<0)
 99         {
100             fprintf(stderr,"line:%d",__LINE__);
101             perror("send");
102             return -1;
103 
104         }
105         printf("send success __%d__",__LINE__);
106 
107     }
108 
109 
110 
111     //关闭文件描述符
112 
113     close(newfd);
114     close(sfd);
115     return 0;
116 }                                                                                                          
~                                                                                                              
~                                                                                                              
~                                                                                                              
TCP客户端
  1 #include <stdio.h>
  2 #include <myhead.h>
  3 
  4 #define CLI_PORT 7777  //1024~49151
  5 #define CLI_IP "192.168.124.17"//ifconfig查找本机的IP地址
  6 
  7 
  8 
  9 int main(int argc, const char *argv[])
 10 {
 11     if(argc <3)
 12     {
 13         printf("请在命令行传入服务器的port和ip\n");
 14         return -1;
 15     }
 16 
 17     //创建流式套接字
 18 
 19     int cfd = socket(AF_INET,SOCK_STREAM,0);
 20     if(cfd <0)
 21     {
 22         fprintf(stderr,"line:%d",__LINE__);
 23         perror("socket");
 24         return -1;
 25     }
 26     printf("创建流式套接字文件成功 cfd=%d __%d__\n",cfd,__LINE__);
 27     //绑定客服端自身的地址信息结构体--->非必须绑定
 28     //若不绑定,则操作系统会自动给客服端绑定客服端所运行主机的IP及随机端口:
 29     //49152~65535
 30     ///以下绑定客服端的地址,可以不写
 31 
 32     //允许端口号被快速重复使用
 33     int reuse = 1;
 34     if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
 35     {
 36         fprintf(stderr,"line:%d",__LINE__);
 37         perror("setsockopt");
 38         return -1;
 39 
 40     }
 41 
 42 
 43     //填充客服端的地址信息结构体,给bind函数绑定使用
 44     //真实的地址信息结构体根据地址族制定
 45     //AF_INET --->man 7 ip
 46     struct sockaddr_in cin;
 47     cin.sin_family = AF_INET;//必须填AF_INET;
 48     cin.sin_port = htons(CLI_PORT);//客服端要绑定的端口号
 49     cin.sin_addr.s_addr = inet_addr(CLI_IP);//客服端绑定的IP地址
 50 
 51     if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))<0)
 52     {
 53         fprintf(stderr,"line:%d",__LINE__);
 54         perror("bind");
 55         return -1;
 56     }
 57     printf("客服端绑定[%s:%d]成功 __%d__\n",CLI_IP,CLI_PORT,__LINE__);
 58 
 59     /
 60     //填充服务器的地址信息,给connect函数连接服务器的时候使用
 61     struct sockaddr_in sin;
 62     sin.sin_family = AF_INET;//必须填AF_INET;
 63     sin.sin_port = htons(atoi(argv[1]));//服务器要绑定的端口号
 64     sin.sin_addr.s_addr = inet_addr(argv[2]);//服务器绑定的IP地址
 65     //连接指定的服务器
 66     if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))<0)
 67     {
 68         fprintf(stderr,"line:%d",__LINE__);
 69         perror("connect");
 70         return -1;
 71     }
 72     printf("connect server[%s:%s] 成功 __%d__\n",argv[2],argv[1],__LINE__);
 73 
 74     char buf[128]= "";
 75     ssize_t res;
 76     while(1)
 77     {
 78         printf("请输入数据>>>");
 79         fgets(buf,sizeof(buf),stdin);
 80         buf[strlen(buf)-1]='\0';
 81 
 82         //发送
 83         strcat(buf,"*_*");
 84         if( send(cfd,buf,sizeof(buf),0)<0)
 85         {
 86             fprintf(stderr,"line:%d",__LINE__);
 87             perror("send");
 88             return -1;
 89 
 90         }
 91         printf("send success __%d__",__LINE__);
 92 
 93 
 94 
 95         //接收
 96         bzero(buf,sizeof(buf));
 97 
 98 
 99         res = recv(cfd,buf,sizeof(buf),0);
100         if(res<0)
101         {
102 
103 
104             fprintf(stderr,"line:%d",__LINE__);
105             perror("recv");
106             return -1;
107         }
108         else if(0==res)
109         {
110             printf("服务器下线 __%d__",__LINE__);
111             break;
112         }
113         printf(":%s __%d__\n",buf,__LINE__);
114 
115     }
116 
117 
118 
119     //关闭文件描述符
120     close(cfd);
121     return 0;
122 }                                                                                          
~                                                                                              
~                                                                                              
~                                                                                              
~                                                                                              
~                                                                                              

现象


机械臂
  1 #include <stdio.h>
  2 #include <myhead.h>
  3 
  4 #define CLI_PORT 7777  //1024~49151
  5 #define CLI_IP "192.168.124.17"//ifconfig查找本机的IP地址
  6 
  7 
  8 
  9 int main(int argc, const char *argv[])
 10 {
 11     if(argc <3)
 12     {
 13         printf("请在命令行传入服务器的port和ip\n");
 14         return -1;
 15     }
 16 
 17     //创建流式套接字
 18 
 19     int cfd = socket(AF_INET,SOCK_STREAM,0);
 20     if(cfd <0)
 21     {
 22         fprintf(stderr,"line:%d",__LINE__);
 23         perror("socket");
 24         return -1;
 25     }
 26     printf("创建流式套接字文件成功 cfd=%d __%d__\n",cfd,__LINE__);
 27 
 28     struct sockaddr_in sin;
 29     sin.sin_family = AF_INET;//必须填AF_INET;
 30     sin.sin_port = htons(atoi(argv[1]));//服务器要绑定的端口号
 31     sin.sin_addr.s_addr = inet_addr(argv[2]);//服务器绑定的IP地址
 32     //连接指定的服务器
 33     if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))<0)
 34     {
 35         fprintf(stderr,"line:%d",__LINE__);
 36         perror("connect");
 37         return -1;
 38     }
 39     printf("connect server[%s:%s] 成功 __%d__\n",argv[2],argv[1],__LINE__);
 40 
 41     int fd = open("/dev/input/event1",O_RDONLY);
 42     if(fd < 0)
 43     {
 44         perror("open");
 45         return -1;
 46     }
 47     struct input_event ev;
 48     char buf[5] = {0xff,0x02,0x00,45,0xff};
 49     unsigned char str[5] = {0xff,0x02,0x01,45,0xff};
 50     if( send(cfd,buf,sizeof(buf),0)<0)
 51         {
 52             fprintf(stderr,"line:%d",__LINE__);
 53             perror("send");
 54             return -1;
 55 
 56         }
 57         printf("send success __%d__",__LINE__);
 58     if( send(cfd,str,sizeof(str),0)<0)
 59         {
 60             fprintf(stderr,"line:%d",__LINE__);
 61             perror("send");
 62             return -1;
 63 
 64         }
 65         printf("send success __%d__",__LINE__);
 66 
 67     char c;
 68     while(1)
 69     {
 70         if(read(fd,&ev,sizeof(ev))<0)
 71         {
 72             perror("read");
 73             return -1;
 74 
 75 
 76         }
 77         switch(ev.code*ev.value)
 78         {
 79             case 17:
 80                 buf[3]+=5;
 81                 if(buf[3]>90)
 82                     buf[3] = 90;
 83                 break;
 84             case 31:
 85                 buf[3]-=5;
 86                 if(buf[3]<-90)
 87                     buf[3]=-90;
 88                 break;
 89             case 30:
 90                 str[3]-=5;
 91                 if(str[3]<0)
 92                     str[3] = 0 ;
 93 
 94                 break;
 95 
 96             case 32:
 97                 str[3]+=5;
 98                 if(str[3]>180)
 99                     str[3] = 180;
100                 break;
101             default:
102                 continue;
103         }
104     if( send(cfd,buf,sizeof(buf),0)<0)
105         {
106             fprintf(stderr,"line:%d",__LINE__);
107             perror("send");
108             return -1;
109 
110         }
111         printf("send success __%d__",__LINE__);
112     if( send(cfd,str,sizeof(str),0)<0)
113         {
114             fprintf(stderr,"line:%d",__LINE__);
115             perror("send");
116             return -1;
117 
118         }
119         printf("send success __%d__",__LINE__);
120 
121 
122 
123     }
124 
125 
126 
127     //关闭文件描述符
128     close(cfd);
129     return 0;                                                                  
130 }
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值