作者achicn3 (Sher)
看板C_and_CPP
标题[问题 ] recvfrom不会block
时间Sun Jun 3 18:36:58 2018
开发平台(Platform): (Ex: Win10, Linux, ...)
Ubuntu
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
No
问题(Question):
经过我测试,client的sendto()没问题会正常送出 但问题就是我的Server端的
if((recvfrom(clientfd,buffer,bufferlen,0,(struct sockaddr*)&client,&size)==-1)
{
printf ("ERROR: Obtain new Socket Despcritor error.\n");
}
照理来说 这边if应该要等client端的sendto()再往下继续执行 可是我只要执行./server
会直接执行printf ("ERROR: Obtain new Socket Despcritor error.\n");这行
看起来像是recvfrom 没有block
也有google过 找其他UDP范例 也是一样的写法 。
喂入的资料(Input):
client端输入 server端的ip port
预期的正确结果(Expected Output):
Server端等待client连线後传送一文字档(.txt)给client
Client收到文字档
错误结果(Wrong Output):
Server端在recvfrom 没有block
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
补充说明(Supplement):
我自己有写另一个tcp版本可以正常运作
换成UDP跟UDP的function 不知为何无法正常运作
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 110.28.35.244
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1528022221.A.00C.html
※ 编辑: achicn3 (110.28.35.244), 06/03/2018 18:41:12
1F:推 stupid0319: UDP= =06/03 19:16
怎麽惹
※ 编辑: achicn3 (27.52.160.35), 06/03/2018 19:21:28
2F:→ stupid0319: udp怎麽会block06/03 19:27
是吗?! 我想法是读到那行if後 server 会hangs在那边等待连线 像是这张照片所说
https://i.imgur.com/R0zhRnY.jpg
※ 编辑: achicn3 (112.105.209.105), 06/03/2018 19:51:17
3F:→ stupid0319: udp跟tcp没差别的话,就不用分两种模式了06/03 20:32
4F:→ Schottky: 你可以用 select 去问有没有东西可读,select 可以设定06/03 23:25
5F:→ Schottky: 成 block 到有东西可以读或出事为止,再去 recvfrom()06/03 23:26
7F:→ alex70266: 因为你没有贴完整source code, 没办法隔空抓药06/04 00:09
8F:→ alex70266: recvfrom return 出去的时候把errno印出来看06/04 00:09
9F:推 alex70266: recvfrom当然可以blocked阿06/04 00:12
感谢各位的回覆
目前可以block了但是结果我接收不到任何东西 囧
※ 编辑: achicn3 (27.52.160.35), 06/04/2018 01:44:04
10F:→ Schottky: 恭喜你进入最难的部份了。06/04 02:04
QQ
11F:→ Jockey66666: udp跟能不能block有什麽关系..不要误导06/04 09:08
12F:推 Bencrie: 我还以为 block 是 ioctl 在控制 der06/04 10:07
感谢各位
※ 编辑: achicn3 (27.52.160.35), 06/04/2018 19:11:04