网络编程
c吧
全部回复
仅看楼主
level 2
最近在看tcpip网络编程这本书,这是第5章的客户端代码。
因为以前写socket的时候write的第三个参数都是用strlen的,于是自己写的时候就卡在这个write函数了,键盘输入什么都没反应,不会执行write之后的代码,按照书上的例子用具体的数字代替了strlen之后就没问题了,中间尝试加上'\0',还是没用,有没有人遇到过类似的情况的,还是说只是单纯的一个编译器玄学的问题
2022年09月21日 04点09分 1
level 11
直接sizeof
2022年09月21日 05点09分 3
sizeof会直接把后面没用到的也发过去的
2022年09月21日 06点09分
@沉默就好了 那strlen()+1
2022年09月21日 06点09分
@无条件投降 只要用了strlen就不行,不往下执行,体现在标准输入就是无论输入什么字符都不会有响应。用sizeof需要在服务端处理一下,还是能运行下去的
2022年09月21日 06点09分
@沉默就好了 兄弟我懂了,strlen不能处理字符串里面含有0000也就是\0的数据,把这事给忘了。[喷]
2022年09月21日 07点09分
level 2
bug如图,用sizeof或者直接用数字都有上面的结果,换成strlen编译运行就不行了
2022年09月21日 06点09分 4
level 2
用gdb调试都能执行到之后的代码。。算了不管了
2022年09月21日 07点09分 5
level 11
33行opmsg有个加+1,导致opmsg[0]是'\0',strlen()算出大小为0,write没有写入数据,导致阻塞在read有没有可能
2022年09月21日 07点09分 6
谢谢兄弟,下标0那里其实是有值的,是卡在服务端那边了。
2022年09月21日 07点09分
不过让我有点疑惑的是我在write之后加了条printf看看能不能打印出点信息出来,然后没打印出来我就一直以为卡在了write,结果刚刚在打印信息那里加了个\n换行结果他就打印出来了我晕,不太明白为什么少个换行会打印不出来
2022年09月21日 07点09分
@沉默就好了 可能是输出缓冲区没有刷新,带\n会立刻刷新缓冲区
2022年09月21日 08点09分
@无条件投降 学到了,谢谢大佬
2022年09月21日 08点09分
level 2
强制类型转换之后用四个字节表示一个整型,里面没用到的字节就会是0000,strlen提前结束了导致服务端那边一直收不到足够的数据卡住了我去[泪]
2022年09月21日 07点09分 7
level 11
我这种垃圾也就只会用三方库了,自己写不好
2022年09月22日 01点09分 9
1