Re: [問題] socket.sendto 用法

看板Python作者 (十年一刻)時間9年前 (2014/07/24 22:55), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
首先 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

07/24 23:07, , 1F
太感謝了!!!!
07/24 23:07, 1F
文章代碼(AID): #1JqHvpS- (Python)
討論串 (同標題文章)
文章代碼(AID): #1JqHvpS- (Python)