无界面 socket通信模拟在线评测
来源:互联网 发布:淘宝上怎么购买呼死你 编辑:程序博客网 时间:2024/04/20 02:49
无界面 socket通信模拟在线评测
客户端向服务端发送一个.c文件 服务端编译并运行此文件并把结果或错误信息返回给客户端;
server.c
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/types.h>#include<unistd.h>#include<sys/socket.h>#include<netinet/in.h>#include<errno.h>#define SERVER_PORT 8888#define LISTEN_QUEUE 20#define BUFFER_SIZE 5000int main(void){ FILE *F,*F1; pid_t pid; int fd[2]; int len; char buffer[BUFFER_SIZE]; bzero(buffer,BUFFER_SIZE); char buffer2[BUFFER_SIZE]; bzero(buffer2,BUFFER_SIZE); //声明并初始化一个服务器端的socket地址结构 struct sockaddr_in server_addr; //int server_socket_fd = socket(PF_INET,SOCK_STREAM,0); bzero(&server_addr,sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(SERVER_PORT); //创建socket 若成功 返回socket描述符 int server_socket_fd = socket(PF_INET,SOCK_STREAM,0); if(server_socket_fd < 0){ perror("创建套接字失败:"); exit(1); } //绑定socket 和 socket地址结构 if(bind(server_socket_fd,(struct sockaddr*)&server_addr,sizeof(server_addr))){ perror("绑定失败:"); exit(1); } //socket 监听 if(-1 == (listen(server_socket_fd,LISTEN_QUEUE))) { perror("监听失败:"); exit(1); } //定义客户打端的socket地址结构 struct sockaddr_in client_addr; socklen_t client_addr_length = sizeof(client_addr); while(1){ int new_server_socket_fd = accept(server_socket_fd,(struct sockaddr*)&client_addr,&client_addr_length); if(new_server_socket_fd < 0 ){ if(errno == EINTR){ continue; } else{ perror("接收失败:"); close(server_socket_fd); exit(1); } } pid = fork(); if(pid < 0){ perror("创建进程失败:"); close(new_server_socket_fd); exit(1); }else if(pid == 0){ while((len = recv(new_server_socket_fd,buffer,BUFFER_SIZE,0)) > 0){ F=fopen("luo.c","w+"); fwrite(buffer,sizeof(char),strlen(buffer),F); fclose(F); if((pipe(fd))<0){ perror("创建管道失败:"); exit(1); } close(2); int result = dup2(fd[1],2); if(result < 0){ perror("redirect stderr error:"); exit(1); } system("gcc -o luo luo.c"); if(access("luo",F_OK)){ printf("编译失败,返回错误信息\n"); read(fd[0],buffer2,BUFFER_SIZE); }else{ F1 = popen("./luo","r"); fread(buffer2,sizeof(char),BUFFER_SIZE,F1); printf("编译成功\n"); pclose(F1); system("rm luo"); } printf("%s\n",buffer2); send(new_server_socket_fd,buffer2,strlen(buffer2),0); close(fd[1]); close(fd[0]); bzero(buffer,BUFFER_SIZE); bzero(buffer2,BUFFER_SIZE); } bzero(buffer,BUFFER_SIZE); bzero(buffer2,BUFFER_SIZE); close(server_socket_fd); _exit(0); }else{ close(new_server_socket_fd); } } return 0;}
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<netinet/in.h>#include<sys/types.h>#include<sys/socket.h>#include<unistd.h>#define SERVER_PORT 8888#define BUFFER_SIZE 10000int main(){ FILE *F; struct sockaddr_in client_addr; bzero(&client_addr,sizeof(client_addr)); client_addr.sin_family = AF_INET; client_addr.sin_addr.s_addr = htonl(INADDR_ANY); client_addr.sin_port = htons(SERVER_PORT); int client_socket_fd = socket(AF_INET,SOCK_STREAM,0); if(client_socket_fd < 0){ perror("创建套接字失败:"); exit(1); } if((connect(client_socket_fd,(struct sockaddr*)&client_addr,sizeof(client_addr))) == -1){ perror("连接失败:"); close(client_socket_fd); exit(1); } char buffer[BUFFER_SIZE]; char buffer1[20]; int return_len; while(1){ bzero(buffer,BUFFER_SIZE); bzero(buffer,20); printf("请输入要运行的程序:"); scanf("%s",buffer1); F = fopen(buffer1,"r"); fread(buffer,sizeof(char),10000,F); return_len = send(client_socket_fd,buffer,strlen(buffer),0); if(return_len <= 0){ perror("发送失败:"); exit(1); } char buffer1[BUFFER_SIZE]; bzero(buffer1,BUFFER_SIZE); recv(client_socket_fd,buffer1,1024,0); printf("结果为:%s\n",buffer1); fclose(F); } close(client_socket_fd); return 0;}运行截图:
1.c 文件内容:
#include<stdio.h>int main(){ printf("我是***!\n"); return 0;}
2.c 文件内容:
#include<stdio.h>int main(){ printf("错误\n") return 0;}
阅读全文
0 0
- 无界面 socket通信模拟在线评测
- socket通信,无阻塞connect
- Socket UDP无连接通信
- Socket通信 ---模拟用户登录
- java模拟多线程socket通信
- Socket编程实践模拟通信
- UDP无连接的Socket通信
- Java模拟简易ATM机运行(无界面、无数据库)
- Java--Socket通信(双向,有界面)
- 模拟QQ-Socket通信线程项目总结
- 简单模拟多线程Socket通信(java)
- dll动态库开发-模拟socket通信
- 简单模拟多线程Socket通信(java)
- 模拟同步流式Socket通信
- C# socket通信 模拟服务器端、客户端
- 在线评测代码网站
- 在线评测系统介绍
- 实现Socket服务端监听(模拟10086在线服务)
- HDU
- pythonic之路(二)
- idea中刷新页面无反应
- 找出不是两个数组共有的元素
- Metasploit 攻击
- 无界面 socket通信模拟在线评测
- 解决Error:Could not determine the class-path for interface com.android.builder.model.AndroidProject.
- MyBatis DAO层有多个参数的处理
- consul UI用127可以访问,指定ip无法访问
- 微信网页授权,获取微信code,获取access_tocken,获取用户信息
- c++三种继承方式
- pip install requests 报错 Could not fetch URL https://pypi.python.org/simple/requests/: There was ..r
- 套接字编程4 ------ 动态生成多线程并发扫描服务器端口的实例
- idea安装报错-NSIS Error-Installer integrity check has failed.......