此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出。欢迎各位前来交流。(部分材料来源网络,若有侵权,立即删除)
本人博客所有文章纯属学习之用,不涉及商业利益。不合适引用,自当删除!
若被用于非法行为,与我本人无关

基于C语言采用UDP协议实现远程控制|详细说明|利用流套接字实现一个简单的远程控制系统

  • 代码
    • 客户端
    • 服务端

代码

客户端

#include<stdio.h>
#include<unistd.h>
#include<sys/socket.h>
#include<string.h>
#include<netdb.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdlib.h>#define PORT 8900
#define BUF_SIZE 2048void print_usage(char* str)
{printf("%s usage :\n",str);printf("%s Ipaddr \n");}int main(int argc, char** argv)
{int sockfd;struct sockaddr_in client;struct sockaddr_in server;char send_buf[BUF_SIZE];char recv_buf[BUF_SIZE];int sendnum;int recvnum;int length;int port;int input_len;if(2!=argc){print_usage(argv[0]);exit(1);    }memset(send_buf,0,2048);memset(recv_buf,0,2048);port = PORT;if (-1==(sockfd=socket(AF_INET,SOCK_DGRAM,0))){perror("generating socket error\n");exit(1);} memset(&server,0,sizeof(struct sockaddr_in));server.sin_family = AF_INET;server.sin_addr.s_addr = inet_addr(argv[1]);server.sin_port = htons(port);length = sizeof(struct sockaddr);    while(1){printf("udp>");fgets(send_buf,BUF_SIZE,stdin);input_len=strlen(send_buf);send_buf[input_len-1]='\0';printf("\n");if (0>sendto(sockfd,send_buf,strlen(send_buf),0,(struct sockaddr*)&server,length)){perror("error occar in sending data\n");break;}if (0==strcmp(send_buf,"quit")){perror("quitting remote ctroling\n");break;}if (0>recvfrom(sockfd,recv_buf,sizeof(recv_buf),0,(struct sockaddr*)&client,&length)){perror("error occar in receiving data\n");break;}fprintf(stdout,"%s\n",recv_buf);}close(sockfd);exit(1);
}

服务端

#include<stdio.h>
#include<unistd.h>
#include<sys/socket.h>
#include<string.h>
#include<netdb.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdlib.h>#define PORT 8900
#define BUF_SIZE 2048int execute(char* command,char* buf);int main()
{int sockfd;struct sockaddr_in client;struct sockaddr_in server;char send_buf[BUF_SIZE];char recv_buf[BUF_SIZE];char cmd[2048];int sendnum;int recvnum;int length;int port;memset(send_buf,0,2048);memset(recv_buf,0,2048);port = PORT;if (-1==(sockfd=socket(AF_INET,SOCK_DGRAM,0))){perror("generating socket error\n");exit(1);}   memset(&server,0,sizeof(struct sockaddr_in));server.sin_family = AF_INET;server.sin_addr.s_addr = htonl(INADDR_ANY);server.sin_port = htons(port);if (-1==bind(sockfd,(struct sockaddr*)&server,sizeof(struct sockaddr))){perror("binding error\n");close(sockfd);exit(1);}length = sizeof(struct sockaddr_in);//协议处理://-----------------------------------------------while(1){memset(recv_buf,0,2048);memset(send_buf,0,2048);if(0>(recvnum = recvfrom(sockfd,recv_buf,sizeof(recv_buf),0,(struct sockaddr*)&client,&length))){perror("error in recving data...\n");break;}  //执行命令,返回结果存入缓冲区 send_buf//*****************************************if (1){recv_buf[recvnum]='\0';if (0==strcmp(recv_buf,"quit")){perror("quitting remote controling\n");break;}printf("the message is: %s\n",recv_buf);strcpy(cmd,"/bin/");strcat(cmd,recv_buf);execute(cmd,send_buf);if ('\0'==*send_buf){memset(cmd,0,sizeof(cmd));strcpy(cmd,"/sbin/");strcat(cmd,recv_buf);execute(cmd,send_buf);if ('\0'==*send_buf){   memset(cmd,0,sizeof(cmd));strcpy(cmd,"/usr/bin/");strcat(cmd,recv_buf);execute(cmd,send_buf);}if ('\0'==*send_buf){   memset(cmd,0,sizeof(cmd));strcpy(cmd,"/usr/sbin/");strcat(cmd,recv_buf);execute(cmd,send_buf);}}if ('\0'==*send_buf)sprintf(send_buf,"command is not vaild,check it please\n");printf("the server message is:%s\n",send_buf);}//*************************************************************if (0>sendto(sockfd,send_buf,sizeof(send_buf),0,(struct sockaddr*)&client,length)){perror("sending data error\n");break;}}//------------------------------------------------close(sockfd);exit(1);
}//执行命令
int execute(char* command,char* buf)
{FILE *     fp;int count;if (NULL==(fp = popen(command,"r"))){perror("creating pipe error\n");exit(1);}count = 0 ;while(((buf[count] = fgetc(fp))!=EOF)&&count<2047)count++;buf[count]='\0';pclose(fp);return count;}

END

从入门到入土:基于C语言采用UDP协议实现远程控制|详细说明|利用流套接字实现一个简单的远程控制系统|代码展示相关推荐

  1. 从入门到入土:基于C语言采用TCP协议实现远程控制|详细说明|利用流套接字实现一个简单的远程控制系统

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  2. 从入门到入土:基于C语言采用UDP协议实现通信功能的程序

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  3. 从入门到入土:基于C语言采用TCP协议实现通信功能的程序(仅有代码)

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  4. QQ使用了什么通讯协议?为什么要这样做?为什么采用 UDP 协议,而不采用 TCP 协议实现?

    登陆采用TCP协议和HTTP协议,你和好友之间发送消息,主要采用UDP协议,内网传文件采用了P2P技术. QQ对于普通用户是采用UDP协议,对于会员用TCP协议 总来的说: 1.登陆过程,客户端cli ...

  5. 采用UDP协议实现PIC18F97J60 ethernet bootloader

    采用UDP协议实现PIC18F97J60 ethernet bootloader 了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloade ...

  6. QQ为何采用UDP协议?

    https://blog.csdn.net/liusandian/article/details/52238939 登陆采用TCP协议和HTTP协议, 你和好友之间发送消息,主要采用UDP协议, 内网 ...

  7. Socket编程(C语言实现)——UDP协议(进程间通信AF_UNIX)的流式(SOCK_STREAM)+报式(SOCK_DGRAM)传输【循环监听】

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  8. Java基于socket服务实现UDP协议的方法

    转载自 Java基于socket服务实现UDP协议的方法 这篇文章主要介绍了Java基于socket服务实现UDP协议的方法,通过两个简单实例分析了java通过socket实现UDP发送与接收的技巧, ...

  9. 从入门到入土:基于C语言采用SOCKET套接字实现TCP公开扫描程序Web服务器扫描程序|代码展示

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

最新文章

  1. java 彩票系统_JAVA版彩票随机生成系统
  2. 在AcGIS随着大数据的生成DEM
  3. 2021年春季学期-信号与系统-第十四次作业参考答案-第八小题参考答案
  4. SAP直接踢人下线 SM04
  5. Android开发中高效的数据结构用SparseArray代替HashMap
  6. Qt中消息的机制原理
  7. Php超出高度隐藏,swiper滑屏中某一页超出高度解决方法
  8. python 删除尾部0_python之List常见操作
  9. java对象json序列化时忽略值为null的属性
  10. linux c 获取文件数量
  11. JDK环境变量设置以及检验是否配置成功
  12. pygame安装教程(小白入手)
  13. catia二次开发:文件视图,exe,窗口切换,隐藏罗盘复位,按名称找对象,newfrom,登录,状态栏, 类型名,显示,不弹提示,workbench,不可视,部分更新,导出展开结构树,换行,元素存在
  14. 商标有效期、续展期、宽展期分别是什么意思?
  15. 【xlwings api语言参考】Worksheet.Cells 属性
  16. java实现分数四则运算
  17. 基于MATLAB的混沌密码与数字图像加密应用、信息隐藏
  18. “C++”读作「C 加加」,为什么“C♯”不能读作「C 井」呢?
  19. python爬取qq好友_利用Python爬取QQ好友空间数据
  20. 快递单号全部查询,物流信息如何快速导出

热门文章

  1. Singularity将本地SIF文件,转成sandbox
  2. 不要在有反馈的平台上输出
  3. MQTT 控制报文 - PINGREQ心跳报文,PINGRESP - 第4章
  4. JS小技巧 ----- 遍历一个对象中所有属性
  5. 【JavaScript】我所知道的JavaScript
  6. tomcat apr Dockfile
  7. Codeforces 817F MEX Queries
  8. 第一次使用并配置Hibernate
  9. 关于Visual Studio .NET 2010最近的发布情况
  10. WEB打印分页类(JS)