作者LiloHuang (十年一刻)
看板Python
标题Re: [问题] socket.sendto 用法
时间Thu Jul 24 22:55:40 2014
首先 SOCK_DGRAM 的连线就是走 UDP 没错,如果要走 TCP 则是 SOCK_STREAM
在设定广播的 flag 之後,这边使用的是 <broadcast> 字串,这是一个特殊的 host
这个部份就是把 s_addr 设定为 INADDR_BROADCAST 的意思
可参照
https://docs.python.org/2/library/socket.html 网页的文字说明
或详阅
http://svn.python.org/projects/python/trunk/Modules/socketmodule.c
if (name[0] == '<' && strcmp(name, "<broadcast>") == 0) {
// 此部分省略
#ifdef HAVE_SOCKADDR_SA_LEN
sin->sin_len = sizeof(*sin);
#endif
sin->sin_addr.s_addr = INADDR_BROADCAST;
return sizeof(sin->sin_addr);
}
※ 引述《erttyy8821 (侠)》之铭言:
: 小弟刚接触Python 不久
: 用的是Python 2.6
: 今天遇到些socket的问题
: 已经先google过但没找到相过的答案
: 我想问的是
: test = ('<broadcast>', 5566)
: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
: s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
: s.sendto("Hi", test)
: 这样一个socket的连线 走的会是UDP嘛?
: 另外<broadcast> 指的是全部广播
: 但就我在java上的认知
: socket全部广播不是要先分组嘛?
: 但我在相关的code上面没有看到关於分组的讯息
: 所以这边指的广播会是所有的ip走一次嘛 还是有其他的限定范围?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 191.233.33.119
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Python/M.1406213747.A.73E.html
1F:推 erttyy8821:太感谢了!!!! 07/24 23:07