C_and_CPP 板


LINE

开发平台(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...... --
1F:→ gcobc12632 :一楼帅哥11/04 22:52
2F:推 maple0935 :二楼帅哥11/04 22:52
3F:推 howar31 :二楼帅哥11/04 22:52
4F:→ howar31 :..11/04 22:52
5F:→ maple0935 :五楼吃屎 11/04 22:53
6F:→ maple0935 :干 可以不要当签名档吗... 11/04 22:53
--



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.113.68.155
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1481120617.A.C9A.html
7F:→ stupid0319: 你一次传送1024个字母吗.............. 12/07 22:30
8F:→ o07608: 这样是不好的习惯吗O_O 12/07 22:31
9F:→ stupid0319: 用DD产生的5kb是什麽?全部都是DD DD DD DD这样? 12/07 22:33
> dd if=/dev/urandom of=test5kb bs=5KB count=1
10F:→ o07608: 怎麽变蓝色的o.0 12/07 22:37
※ 编辑: o07608 (140.113.68.155), 12/07/2016 22:45:21
11F:→ x000032001: 如果你的档案有一个byte是0x00 就会视为字串结束 12/07 22:46
12F:→ x000032001: 所以你要用n判断大小 而不是strlen 12/07 22:47
13F:→ x000032001: read/write直接拿来strxxx 就是无止尽的踩地雷游戏 12/07 22:47
14F:→ o07608: 但实际上每段传到receiver的东西大小也小於1024 12/07 22:51
15F:→ o07608: 还是说我不应该用char阵列传东西?那应该要用什麽型态? 12/07 22:52
16F:推 LPH66: 不是不该用 char 阵列, 而是你要知道 char 阵列不等於字串 12/07 22:59
17F:→ LPH66: strxxx 系列函数只能用在是字串的 char 阵列上 12/07 23:00
18F:→ LPH66: 你的资料是从 /dev/urandom 里复制来的所以是二进位资料 12/07 23:00
19F:→ LPH66: 二进位资料不是字串所以不能用 strxxx 系列函数 12/07 23:01
20F:→ LPH66: 所以只有 read 的回传值 n 可信, 你要 write 也要用 n 12/07 23:01
21F:推 LPH66: 话说回来, 既然是在练习 udp 传输, 一次就是固定一个大小 12/07 23:04
22F:→ LPH66: 所以不管传什麽资料都不是 strxxx 出场的时候 12/07 23:04
23F:→ LPH66: 这也就是为什麽 read 这种 general 读取的程式会回传读多少 12/07 23:05
24F:→ o07608: 嗯我懂了,write最後参数我的确不是用n判断 12/07 23:05
25F:→ o07608: 改一下试试看 12/07 23:05
26F:→ o07608: 问题找到了,果然是write参数用错,感谢大家 12/07 23:12







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP