看板 Python 關於我們 聯絡資訊
首先 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://www.ptt.cc/bbs/Python/M.1406213747.A.73E.html
erttyy8821:太感謝了!!!! 07/24 23:07