华为荣耀6x计算机怎么找不到,华为荣耀6x桌面软件找不到了,怎样找到

本文展示了一个使用C语言实现的网络编程示例,其中包括服务器端的设置与客户端的数据接收处理流程。通过创建监听套接字、接受客户端连接请求、多线程处理等功能,实现了数据的接收与基于时间的文件搜索功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

匿名用户

1级

2018-07-18 回答

#include // for sockaddr_in

#include // for socket

#include // for socket

#include // for printf

#include // for exit

#include // for bzero

#include

#include // for open

#include // for close

#include //for thread

#include //for time

struct info {

char dirname[50];

int mysock;

};

void* search_by_time(void * arg) {

FILE * fp; //文件指针

char strtime[32];

bzero(strtime, 32);

char start_time[16];

char end_time[16];

bzero(start_time, 16);

bzero(end_time, 16);

char dirname[20];

char cmd[200];

char path[20];

char colletc_file[20];

char colletc_file_data[50];

struct info *sinfo = arg;

int socket = sinfo->mysock;

while (1) {

if (socket != -1) {

int len;

while ((len = recv(socket, strtime, 32, 0)) > 0) {

if (strncmp(strtime, "quit", 4) == 0) {

fclose(fp);

pthread_exit(NULL);

}

strncpy(start_time, strtime, 15);

char *p = strtime;

p += 16;

strncpy(start_time, strtime, 15);

bzero(cmd, 100);

strcpy(cmd, "cd ");

strcat(path, "./");

strcat(path, sinfo->dirname);

strcat(path, "/");

system(cmd);

bzero(cmd, 100);

strcpy(cmd, "touch -t ");

strcat(cmd, start_time);

strcat(cmd, " start");

system(cmd);

bzero(cmd, 100);

strcpy(cmd, "touch -t ");

printf("%s\n", end_time);

strcat(cmd, end_time);

strcat(cmd, " end");

system(cmd);

bzero(cmd, 100);

strcpy(cmd,

"find ./* -newer start ! -newer end | tr -d \"./\" >>a");

fp = fopen("a", "r");

while (1) {

fgets(colletc_file, 20, fp);

if (strcmp(colletc_file, "end") == 0) {

fclose(fp);

} else {

FILE * cfp;

fp = fopen(colletc_file, "r");

fgets(colletc_file_data, 50, cfp);

printf("%s\n", colletc_file_data);

;

}

}

bzero(strtime, 32);

}

}

}

}

void* recv_data(void * arg) {

char dirname[20];

char filename[20];

char cmd[50];

char path[50];

char strtime[64];

time_t rawtime;

struct tm *t;

time(&rawtime);

t = localtime(&rawtime);

char recv_buf[100];

bzero(recv_buf, 100);

FILE * fp; //文件指针

struct info *sinfo = arg;

int socket = sinfo->mysock;

sprintf(dirname, "%s", sinfo->dirname);

strcpy(cmd, "mkdir ");

strcat(cmd, dirname);

system(cmd);

sprintf(path, "./");

strcat(path, dirname);

strcat(path, "/");

strftime(strtime, 64, "%Y-%m-%d-%H:%M", t);

strcat(path, strtime);

fp = fopen(path, "a+");;

while (1) {

if (socket != -1) {

int len;

while ((len = recv(socket, recv_buf, 100, 0)) > 0) {

if (strncmp(recv_buf, "quit", 4) == 0) {

fclose(fp);

pthread_exit(NULL);

}

printf("采集数据为: %s\n", recv_buf);

strcat(recv_buf, " ");

strcat(recv_buf, asctime(t)); //添加时间

fputs(recv_buf, fp);

fputs("\n", fp);

bzero(recv_buf, 100);

}

fclose(fp);

}

usleep(100000);

}

}

int main() {

struct sockaddr_in server_addr; //创建服务器地址

bzero(&server_addr, sizeof(server_addr));

server_addr.sin_family = AF_INET;

server_addr.sin_addr.s_addr = inet_addr("10.16.103.243");

server_addr.sin_port = htons(8888);

int len = sizeof(server_addr);

int server_sock = socket(AF_INET, SOCK_STREAM, 0); //创建服务器监听套接字

int search_sock = socket(AF_INET, SOCK_STREAM, 0); //创建查询套接字

if (server_sock < 0) {

printf("创建服务器套接字失败!");

}

int opt = 1;

setsockopt(server_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));

if (bind(server_sock, (struct sockaddr*) &server_addr, len)) { //将服务器地址和服务器套套接字绑定

printf("服务器绑定端口: %d 失败!\n", ntohs(server_addr.sin_port));

exit(1);

}

opt = 1;

setsockopt(search_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));

if (bind(search_sock, (struct sockaddr*) &server_addr, len)) { //将服务器地址和服务器套套接字绑定

printf("服务器绑定端口: %d 失败!\n", ntohs(server_addr.sin_port));

exit(1);

}

pthread_t server_Listening_Thread;

pthread_t recv_data_thread;

pthread_t search_by_time_thread;

int new_server_socket; //服务器连接套接字

int new_search_socket;

listen(server_sock, 5); //服务器监听

listen(search_sock, 5);

while (1) {

struct info sinfo;

struct sockaddr_in client_addr; //创建客户端地址

int len = sizeof(client_addr);

new_server_socket = accept(server_sock, (struct sockaddr*) &client_addr,

&len);

if (new_server_socket < 0) {

printf("连接客户端 %s:%d失败!\n", inet_ntoa(client_addr.sin_addr),

ntohs(client_addr.sin_port));

break;

}

printf("连接客户端 %s:%d成功!\n", inet_ntoa(client_addr.sin_addr),

ntohs(client_addr.sin_port));

if (new_server_socket > 0) {

struct info sinfo;

bzero(&sinfo, sizeof(sinfo));

sinfo.mysock = new_server_socket;

strcpy(sinfo.dirname, inet_ntoa(client_addr.sin_addr));

pthread_create(&recv_data_thread, NULL, recv_data, &sinfo);

}

new_search_socket = accept(search_sock, (struct sockaddr*) &client_addr,

&len);

if (new_search_socket < 0) {

printf("连接客户端 %s:%d失败!\n", inet_ntoa(client_addr.sin_addr),

ntohs(client_addr.sin_port));

}

if (new_search_socket > 0) {

pthread_create(&search_by_time_thread, NULL, search_by_time,

&sinfo);

}

}

while (1)

usleep(4000);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值