在linux下如何用c语言实现在服务器接受文件的时候转发给另一个服务器

在linux下如何用c语言实现在服务器接受文件的时候转发给另一个服务器,第1张

题目说得比较清楚,但问题说明确让人摸不着头脑。

根据题目的意思,其实这个问题很好解决:一旦服务器接收到文件后(接收程序是自己编写的程序),则调用三方ftp的C语言库,将文件ftp到另一个服务器即可。

若服务器接收文件不是通过自己写的程序,如是通过NFS写过来的,则需要专门写一个简单的同步程序,定时检查指定目录下的文件属性,一旦发现有新文件,则ftp到另一个服务器即可。

只是做这些动作的话不需要多线程找了下以前写的 改成了你说的10次发送client.c:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>int main(int argc,char **argv){ char wbuf[] = "hello server" char rbuf[128] int i int sock struct sockaddr_in server = {0} struct timeval timeo timeo.tv_sec = 0 timeo.tv_usec = 1000 * 1000 // socklen_t len = sizeof(timeo) if( argc != 2){ printf("usage: ./client <ipaddress>\n") return -1 } sock = socket(AF_INET, SOCK_STREAM, 0) if(sock <0) { perror("Create TCP Socket") return -1 } setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &timeo, len) server.sin_family = AF_INET server.sin_port = htons(30000) inet_pton(AF_INET, argv[1], &(server.sin_addr)) int res = connect(sock, (struct sockaddr*)&server, sizeof(server)) if (res <0) { if(res == EINPROGRESS) perror("connecting stream socket time out:") else perror("connecting stream socket error:") close(sock) return -1 } else { printf("Connect Server@%s\n",argv[1]) for(i=0i<10i++) { int wsize = send(sock,wbuf,sizeof(wbuf),0) if(wsize<=0) { perror("write error:") close(sock) return -1 } printf("1111111i=%d\n",i) while(1) { int rsize=recv(sock,rbuf,sizeof(rbuf),0) if(rsize>0) { rbuf[rsize]='\0' printf("recv msg from server: %s\n",rbuf) break } if(rsize<0) { close(sock) perror("read error:") return -1 } } } close(sock) return 0 }}server.c:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>int main(int argc, char** argv){intlistenfd, connfd struct sockaddr_in servaddr = {0} charrbuf[128] charwbuf[] = "hello client" int n if( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){ perror("Create TCP Socket") return -1 }servaddr.sin_family = AF_INET servaddr.sin_addr.s_addr = htonl(INADDR_ANY) servaddr.sin_port = htons(30000) if( bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){ perror("bind socket error:") return -1 }if( listen(listenfd, 10) == -1){ perror("listen socket error:") return -1 }printf("======waiting for client's request======\n") while(1){ if( (connfd = accept(listenfd, (struct sockaddr*)NULL, NULL)) == -1) {perror("accept socket error:") continue } while(1) { n = recv(connfd, rbuf, sizeof(rbuf), 0) if(n>0) { rbuf[n] = '\0' printf("recvmsg from client: %s\n", rbuf) n = send(connfd, wbuf, sizeof(wbuf),0) if(n<=0) { perror("sned error:") close(connfd) break } } else if(n <0) { perror("recv error:") close(connfd) break } } close(connfd) }close(listenfd) return 0}运行的时候 client ./client 你的serverip端口我用的30000 写死在程序里了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8390313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-16
下一篇 2023-04-16

发表评论

登录后才能评论

评论列表(0条)

保存