• 2024/03/01


    控制机械臂

    1. #include<myhead.h>
    2. #define SER_IP "192.168.126.2"
    3. #define SER_PORT 8888
    4. #define CLI_IP "192.168.252.165"
    5. #define CLI_PORT 9999
    6. int main(int argc, const char *argv[])
    7. {
    8. int cfd=socket(AF_INET,SOCK_STREAM,0);
    9. if(cfd==-1)
    10. {
    11. perror("socket error");
    12. return -1;
    13. }
    14. printf("cfd=%d\n",cfd);
    15. struct sockaddr_in cin;
    16. cin.sin_family=AF_INET;
    17. cin.sin_port=htons(CLI_PORT);
    18. cin.sin_addr.s_addr=inet_addr(CLI_IP);
    19. if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1)
    20. {
    21. perror("bind error");
    22. return -1;
    23. }
    24. printf("connect success\n");
    25. struct sockaddr_in sin;
    26. sin.sin_family=AF_INET;
    27. sin.sin_port=htons(SER_PORT);
    28. sin.sin_addr.s_addr=inet_addr(SER_IP);
    29. if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
    30. {
    31. perror("connect error");
    32. return -1;
    33. }
    34. char rbuf[5]={0xff,0x02,0x00,0x00,0xff};
    35. unsigned char bbuf[5]={0xff,0x02,0x01,0x00,0xff};
    36. send(cfd,rbuf,sizeof(rbuf),0);
    37. sleep(1);
    38. send(cfd,bbuf,sizeof(bbuf),0);
    39. char key=0;
    40. while(1)
    41. {
    42. scanf("%c",&key);
    43. fflush;
    44. switch(key)
    45. {
    46. case'W':
    47. case'w':
    48. {
    49. rbuf[3]+=2;
    50. if(rbuf[3]>=90)
    51. {
    52. rbuf[3]=90;
    53. }
    54. send(cfd,rbuf,sizeof(rbuf),0);
    55. }
    56. break;
    57. case's':
    58. case'S':
    59. {
    60. rbuf[3]=rbuf[3]-2;
    61. if(rbuf[3]<=-90)
    62. {
    63. rbuf[3]=90;
    64. }
    65. send(cfd,rbuf,sizeof(rbuf),0);
    66. }
    67. break;
    68. case'd':
    69. case'D':
    70. {
    71. bbuf[3]+=2;
    72. if(bbuf[3]>=180)
    73. {
    74. bbuf[3]=180;
    75. }
    76. send(cfd,bbuf,sizeof(bbuf),0);
    77. }
    78. break;
    79. case'a':
    80. case'A':
    81. {
    82. bbuf[3]=bbuf[3]-2;
    83. if(bbuf[3]>=180)
    84. {
    85. bbuf[3]=0;
    86. }
    87. }
    88. break;
    89. }
    90. }
    91. close(cfd);
    92. return 0;
    93. }

    tftp

    1. #include <myhead.h>
    2. #define IP "192.168.126.2"
    3. #define PORT 69
    4. //定义下载函数
    5. int do_download(int sfd,struct sockaddr_in sin)
    6. {
    7. char pack[516]="";
    8. //组件协议包:下载请求
    9. short *p1=pack;
    10. *p1=htons(1); //设置操作码
    11. char *p2=pack+2;
    12. char filename[40]="";
    13. printf("请输入要下载的文件名>>>");
    14. fgets(filename,sizeof(filename),stdin);
    15. filename[strlen(filename)-1]=0;
    16. strcpy(p2,filename);
    17. char *p4=p2+strlen(p2)+1;
    18. strcpy(p4,"octet"); //模式位
    19. int packlen=4+strlen(p2)+strlen(p4); //请求包的大小
    20. //向服务器发送请求包
    21. if(sendto(sfd,pack,packlen,0,(struct sockaddr*)&sin,sizeof(sin))==-1)
    22. {
    23. perror("sendto error");
    24. return -1;
    25. }
    26. printf("请求成功\n");
    27. //收取服务器发来的数据包
    28. char rbuf[516]="";
    29. short *r1=rbuf;
    30. //创建一个文件
    31. int fd=-1;
    32. if((fd=open(filename,O_RDWR|O_CREAT|O_TRUNC,0664))==-1)
    33. {
    34. perror("open error");
    35. return -1;
    36. }
    37. printf("fd=%d\n",fd);
    38. socklen_t socklen=sizeof(sin);
    39. while(1)
    40. {
    41. // printf("111\n");
    42. bzero(rbuf,sizeof(rbuf));
    43. int res=recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&sin,&socklen);
    44. if(*r1==ntohs(3))
    45. {
    46. if(write(fd,rbuf+4,res-4)<0)
    47. {
    48. perror("write error");
    49. break;
    50. }
    51. *r1=htons(4);
    52. if(sendto(sfd,rbuf,4,0,(struct sockaddr*)&sin,sizeof(sin))==-1)
    53. {
    54. perror("sendto error");
    55. return -1;
    56. }
    57. if(res<516)
    58. {
    59. printf("下载完毕\n");
    60. break;
    61. }else if(rbuf[1]==5)
    62. {
    63. printf("download error:%s\n",rbuf+4);
    64. }
    65. }
    66. }
    67. close(fd);
    68. return 0;
    69. //如果为512,则读取后,回复一个应打包,继续接收下一个
    70. //如果小于512,则读取数据后,回复一个应打包,结束接收数据
    71. }
    72. //定义上传函数
    73. int do_upload(int sfd,struct sockaddr_in sin)
    74. {
    75. char pack[516]="";
    76. //组件协议包:上传请求
    77. short *p1=pack;
    78. *p1=htons(2); //设置操作码
    79. char *p2=pack+2;
    80. char filename[40]="";
    81. printf("请输入要上传的文件名>>>");
    82. fgets(filename,sizeof(filename),stdin);
    83. filename[strlen(filename)-1]=0;
    84. strcpy(p2,filename);
    85. char *p4=p2+strlen(p2)+1;
    86. strcpy(p4,"octet"); //模式位
    87. int packlen=4+strlen(p2)+strlen(p4); //请求包的大小
    88. //向服务器发送请求包
    89. if(sendto(sfd,pack,packlen,0,(struct sockaddr*)&sin,sizeof(sin))==-1)
    90. {
    91. perror("sendto error");
    92. return -1;
    93. }
    94. printf("请求成功\n");
    95. //从linux系统中读取文件,然后发送给服务器
    96. //以只读的形式打开上传的文件
    97. int fd1=-1;
    98. if((fd1=open(filename,O_RDWR))==-1)
    99. {
    100. perror("open error");
    101. return -1;
    102. }
    103. printf("fd1=%d\n",fd1);
    104. socklen_t socklen=sizeof(sin);
    105. //用来读取文件的容器
    106. char rbuf[516]="";
    107. short *r1=rbuf; //操作码
    108. short *r2=rbuf+2; //块编号
    109. int i=1;
    110. int len=0; //读取文件的大小
    111. while(1)
    112. {
    113. bzero(rbuf,sizeof(rbuf));
    114. int res=recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&sin,&socklen);
    115. if(*r1==ntohs(4))
    116. {
    117. bzero(rbuf,sizeof(rbuf));
    118. len=read(fd1,rbuf+4,512);
    119. *r2=htons(i); //给块编号赋值
    120. //把读取文件的内容发送给服务器
    121. *r1=htons(3); //给操作码赋值
    122. if(sendto(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&sin,socklen)==-1)
    123. {
    124. perror("sendto error");
    125. return -1;
    126. }
    127. i++;
    128. if(len<512)
    129. {
    130. printf("上传完毕\n");
    131. break;
    132. }else if(rbuf[1]==5)
    133. {
    134. printf("upload error:%s\n",rbuf+4);
    135. }
    136. }
    137. }
    138. close(fd1);
    139. return 0;
    140. }
    141. int main(int argc, const char *argv[])
    142. {
    143. int sfd=-1;
    144. if((sfd=socket(AF_INET,SOCK_DGRAM,0))==-1)
    145. {
    146. perror("socket error");
    147. return -1;
    148. }
    149. printf("sfd=%d\n",sfd);
    150. struct sockaddr_in sin;
    151. sin.sin_family=AF_INET;
    152. sin.sin_port=htons(PORT);
    153. sin.sin_addr.s_addr=inet_addr(IP);
    154. socklen_t socklen=sizeof(sin);
    155. int menu=0;
    156. while(1)
    157. {
    158. system("clear");
    159. printf("****************\n");
    160. printf("*****1.下载*****\n");
    161. printf("*****2.上传*****\n");
    162. printf("*****3.退出*****\n");
    163. printf("****************\n");
    164. printf("请输入选项:");
    165. scanf("%d",&menu);
    166. getchar();
    167. //对菜单多分支选择
    168. switch(menu)
    169. {
    170. case 1:
    171. {
    172. //下载功能
    173. do_download(sfd,sin);
    174. }
    175. break;
    176. case 2:
    177. {
    178. //上传功能
    179. do_upload(sfd,sin);
    180. }
    181. break;
    182. case 3:goto END;
    183. break;
    184. default:printf("输入错误,请重新输入\n");
    185. }
    186. printf("请输入任意键按回车结束\n");
    187. while(getchar()!='\n');
    188. }
    189. END:
    190. close(sfd);
    191. return 0;
    192. }

  • 相关阅读:
    Golang跨平台UI框架之Wails(一)
    DSMM是什么?一篇内容让你快速了解
    【ACWing】406. 放置机器人
    玩转Vue3全家桶开篇词丨如何借助Vue3建构你的前端知识体系?
    Java设计模式之策略模式
    Python的文件操作
    卓岚APP远程采集正泰单相电子式电能表 ZLAN5144J的应用分享
    通信笔记:RSRP、RSRQ、RSNNR
    Webpack最简单的流程理解
    grpc、https、oauth2等认证专栏实战8:https单向认证 介绍
  • 原文地址:https://blog.csdn.net/qq_55245263/article/details/136440460