【发布时间】:2013-01-18 18:29:26
【问题描述】:
我们在 UNIX 环境中制作了简单的 client.c 和 server.c 程序。我们使用它传输一个简单的文本文件,首先打开它,然后读取它并使用open、read和send系统调用发送;在客户端,我正在接收它,并通过在服务器机器上创建一个文件来编写它。传输进行得很顺利,但在客户端收到的文件与服务器端的文件并不完全相同。在可读字符之间有一些不可读的字符。你能告诉我这可能是什么原因吗?虽然文件的大部分内容相同,但只有一小部分之间存在一些差异。
代码可见here。
谢谢!
服务器端循环:
do
{
n=read(t,buf,100);
write(1,buf,strlen(buf));
send(connected, buf,strlen(buf), 0);
} while(n!=0);
在客户端
do
{
bytes_recieved=recv(sock,recv_data,100,0);
count=write(t,recv_data,strlen(recv_data));
} while(bytes_recieved!=0);
【问题讨论】:
-
请展示您的代码(或相关的sn-ps,尤其是读写循环)
-
我应该在哪里粘贴代码。我应该只通过编辑问题将其粘贴到这里。对不起这个问题,但我相对于这个论坛,如果我们的东西太长或什么的,很多人会感到恼火他们可能不喜欢。谢谢
-
如果代码很多,你可以使用某种粘贴板并添加链接。如果是少量代码,可以直接放在问题中。无论哪种方式,您都应该编辑此问题并添加新信息。
-
可能有很多问题,但我们需要看到比您发布的更多的代码。可能是 buf 太小而无法读取您已读入的文件的 100 字节,或者 recv_data 太小而无法从套接字读取 100 字节。事实上,还有很多潜在的问题,但我们需要看到更多的代码。
-
我马上看到的一个问题是您正在使用 strlen(buf)... buf 101 bytes memset 为 0 吗?你应该总是写 n,而不是 strlen(buf),因为 read 可能返回的字节数可能少于 100 个字节。另外,出于同样的原因发送 n。
标签: c