楼主:
o07608 (无良记者)
2016-12-07 22:23:33开发平台(Platform): (Ex: Win10, Linux, ...)
Linux
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
gcc
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
无
问题(Question):
我的网络程式设计功课,需要写一个UDP sender/reciever来传资料
我想在sender open指定档案后,一段段read进阵列里传到reciever,write进另一个档案
但当我在read时,假设:
char buf[1024];
n = read(fd, buf, 1024); //fd指向已开启档案,大小5KB
把n和strlen(buf)印出来
n会是1024没错,但strlen(buf)却远小于1024
传到receiver write进新开的档案之后,新的档案大小也会小很多
喂入的资料(Input):
用dd随机产生的5kb档案
预期的正确结果(Expected Output):
从sender端完美复制到reciever端
错误结果(Wrong Output):
read进阵列的每段资料都差很多
程式码(Code):(请善用置底文网页, 记得排版)
http://codepad.org/HGM1mFF7
如有需要完整的sender程式码,我再另行附上
补充说明(Supplement):
网络程式设计作业老是会出现神奇的bug......
作者:
LPH66 (-6.2598534e+18f)
2016-12-07 22:59:00不是不该用 char 阵列, 而是你要知道 char 阵列不等于字串strxxx 系列函数只能用在是字串的 char 阵列上你的资料是从 /dev/urandom 里复制来的所以是二进制资料二进制资料不是字串所以不能用 strxxx 系列函数所以只有 read 的回传值 n 可信, 你要 write 也要用 n话说回来, 既然是在练习 udp 传输, 一次就是固定一个大小所以不管传什么资料都不是 strxxx 出场的时候这也就是为什么 read 这种 general 读取的程式会回传读多少