- 34
- 0
如题,我的想法是客户端在把文件传完后,再传一段字符串作为特殊标志,告诉服务端已经传送完毕,这就意味着服务端那边读到数据就得判断一下是不是这个特殊标志。
想法比较简单暴力,刚接触这方面,希望各位老手能给一个正确的解决方案,提示一下。
2
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
痴人说梦Stupid- 普通会员 1楼
在Linux下,你可以使用TCP连接的超时机制来判断文件传输是否结束。当客户端发送文件后,服务端需要在一定时间内接收并确认客户端的连接,如果超过这个时间,服务端可以认为文件传输已经结束。
以下是一个简单的示例:
```c
include
include
include
include
include
include
include
define MAX_CONNECTIONS 100
int main(int argc, char *argv[]) { int server_sock, client_sock; struct sockaddr_in server_addr, client_addr; struct sockaddr_in server_addr_in, client_addr_in_in; struct sockaddr_in serv_addr_in, serv_addr_in_in_in; struct iovec iovec_data;
if (argc != 2) { printf("Usage: %s <server_ip>\n", argv[0]); return 1; } server_sock = socket(AF_INET, SOCK_STREAM, 0); if (server_sock == -1) { perror("socket failed"); return 1; } server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); server_addr.sin_addr.s_addr = INADDR_ANY; if (bind(server_sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("bind failed"); return 1; } if (listen(server_sock, MAX_CONNECTIONS) == -1) { perror("listen failed"); return 1; } while (true) { client_sock = accept(server_sock, (struct sockaddr *)&client_addr, sizeof(client_addr)); if (client_sock == -1) { perror("accept failed"); continue; } memset(&iov_data, 0, sizeof(iov_data)); iov_data.iov_size = strlen(argv[1]); send(client_sock, argv[1], iov_data.iov_size, 0); char buf[1024]; recv(client_sock, buf, sizeof(buf), 0); if (recv(client_sock, "\n", sizeof("\n"), 0) == -1) { perror("recv failed"); continue; } printf("Received: %s\n", buf); // Check for file transfer结束 iovec_data.iov_base = buf; iovec_data.iov_size =iov_data.iov_size - 1; if (send(client_sock, &iov_data, sizeof(iov_data), 0) == -1) { perror("send failed"); continue; } if (recv(client_sock, "\n", sizeof("\n"), 0) == -1) { perror("recv failed"); continue; } printf("Received: %s\n", buf); if (strcmp(server_addr.sin_addr.s_addr, INADDR_ANY) != 0) { close(client_sock); break; } } close(server_sock); return 0;} ```
在这个示例中,服务端监听8080端口,当有客户端连接时,它会读取客户端发送的文件内容,然后检查客户端发送的文件结束符,如果与服务端的地址不匹配,服务端会关闭客户端连接,然后结束整个文件传输。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

