gpt4 book ai didi

c - 如何使用套接字 api 发送和接收字节?

转载 作者:可可西里 更新时间:2023-11-01 02:55:27 25 4
gpt4 key购买 nike

您好,我写了一个服务器应用程序,它从客户端接受一个通常是文件名的名称。它打开文件,将内容读入缓冲区,然后使用 send() 通过以太网传输缓冲区。但问题出现在客户端,所有字节都没有成功接收。我只收到了我发送的一部分。

供您引用,这是服务器端的代码片段:

服务器:

fp = fopen(filename,"r+");  
strcpy(str,"");
fseek(fp, 0L, SEEK_END);
size = ftell(fp);
fseek(fp, 0L, SEEK_SET);
fread(str, size, 1,fp);
fclose(fp);
printf("Size of the file is : %d\n",size);
sprintf(filename, "%d", size);
n = send(nsd, filename, strlen(filename), 0);

while(size > 0){
n = send(nsd, str, strlen(str), 0);
printf("%d bytes sent successfully\n",n);
if(n == 0) break;
sentbytes = sentbytes + n;
size = size - sentbytes;
}

请帮助我编写客户端应用程序。我目前对如何编写它感到困惑。我应该将 recv() 部分放在 while(1) 循环,以便客户端继续运行,直到所有字节都已成功接收?

最佳答案

已编辑
对于初学者,您可以同时读取文件写入套接字
由于您是通过 TCP 传输数据,请记住数据是作为流而不是消息可靠地传输的。因此,除了顺序之外,不要假设数据是如何接收的。

可以这样写:

open socket
open file
size_of_file = read_file_size(file);
send(socket, &size_of_file, sizeof(int), ...)
while (all is written)
read fixed chunk from file
write as much was read to the socket
cleanup // close file, socket

至于 recv 部分,我认为最好将文件大小作为整数发送,并在 while 循环中继续读取,直到接收到与发送的字节一样多的字节从服务器。

是这样的:

recv(socket, &size_of_msg, sizeof(int), ...)
while(all is read)
read fixed chunk from the socket
cleanup

关于c - 如何使用套接字 api 发送和接收字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10673261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com