導航:首頁 > 編程語言 > pythonsocket廣播

pythonsocket廣播

發布時間:2022-06-26 21:43:11

『壹』 python socket 如何實現廣播單播切換

#三個線程:#線程1:產生遞增的數字,轉成字元串放到隊列中#線程2:監聽埠,將產生的連接放到列表中#線程3:從隊列中取出數字,遍歷連接列表,發送到所有客戶端#線程1:產生遞增的數字,轉成字元串放到隊列中classProcer(threading.Thread):

def__init__(self,work_queue):
super().__init__()#必須調用
self.work_queue=work_queue

defrun(self):
#print("Beginproce...")
num=1
whileTrue:
self.work_queue.put(str(num))
num=num+1
time.sleep(1)#暫停1秒#線程2:監聽埠,將產生的連接放到列表中classSocketServer(threading.Thread):

def__init__(self,socket_list):
super().__init__()
self.socket_list=socket_list

defrun(self):
sock=socket.socket()
sock.bind(('',9090))
sock.listen(5)
print("Startlisten...")
whileTrue:
conn,addr=sock.accept()
print("Connectby",addr)
self.socket_list.append((conn,addr))#線程3:從隊列中取出數字,遍歷連接列表,發送到所有客戶端classPrinter(threading.Thread):

def__init__(self,work_queue,socket_list):
super().__init__()#必須調用
self.work_queue=work_queue
self.socket_list=socket_list

defrun(self):
whileTrue:
num=self.work_queue.get()#當隊列為空時,會阻塞,直到有數據
forsock,addrinself.socket_list:#遍歷保存連接的列表
print("Send",num,"To",addr)
try:
sock.sendall(bytes(num+' ','utf-8'))#把字元串轉換成位元組數組發送
except:
print("Disconnectby",addr)#如果連接斷開,發送會失敗
self.socket_list.remove((sock,addr))#從列表中刪除斷開的連接defmain():
work_queue=queue.Queue()
socket_list=[]#為了更安全可靠,從多線程訪問列表時應該加鎖,
#這里做了簡化,因為列表的增加刪除操作基本上可以認為是線程安全的

socket_server=SocketServer(socket_list)
socket_server.daemon=True
socket_server.start()

printer=Printer(work_queue,socket_list)
printer.daemon=True#當主線程退出時子線程也退出
printer.start()

procer=Procer(work_queue)
procer.daemon=True#當主線程退出時子線程也退出
procer.start()

time.sleep(1)#這里要暫停一下,否則執行下一條語句時,會因隊列為空而直接返回
work_queue.join()#主線程會停在這里,直到所有數字被get(),並且task_done(),因為沒有調用task_done(),所在這里會一直阻塞,直到用戶按^Cif__name__=='__main__':
main()

『貳』 python socket通信問題

亂碼只是這樣說,別人不知道怎麼回事啊。
可以用個線程上報啊。

『叄』 python中使用socket編程,如何能夠通過UDP傳遞一個列表類型的數據

Python中的 list 或者 dict 都可以轉成JSON字元串來發送,接收後再轉回來。


首先

importjson

然後,把 list 或 dict 轉成 JSON

json_string=json.mps(list_or_dict)

如果你用的是Python3,這里的 json_string 會是 str 類型(即Python2的unicode類型),可能需要編碼一下:

if type(json_string) == six.text_type:

json_string = json_string.encode('UTF-8')

用socket發送過去,例如

s.sendto(json_string,address)


對方用socket接收,例如

json_string,addr=s.recvfrom(2048)

把JSON轉成 list 或 dict

list_or_dict=json.loads(json_string)




下面是個完整的例子:


client.py

#!/usr/bin/envpython
#-*-coding:UTF-8-*-

importsocket
importjson
importsix

address=('127.0.0.1',31500)
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
mylist=[1,2,3,4,5,6,7,8,9,10]
json_string=json.mps(mylist)
iftype(json_string)==six.text_type:
json_string=json_string.encode('UTF-8')
s.sendto(json_string,address)
s.close()


server.py

#!/usr/bin/envpython
#-*-coding:UTF-8-*-

importsocket
importjson

address=('127.0.0.1',31500)
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(address)
json_string,addr=s.recvfrom(2048)
mylist=json.loads(json_string)
print(mylist)
s.close()


請先運行server.py,再運行client.py

『肆』 python socket 發送udp和tcp的區別

Python中的 list 或者 dict 都可以轉成JSON字元串來發送,接收後再轉回來。 首先 import json然後,把 list 或 dict 轉成 JSON json_string = json.mps(list_or_dict)用socket發送過去,例如 s.sendto(json_string, address) 對方用socket接收...

『伍』 求完整的用python語言實現socket編程,完成數據的發送,接收轉發的程序!!急!!!謝謝!!

看文檔中的樣例吧(底下前兩個),稍微改一下就是你所想要的了。
http://docs.python.org/2/library/socket.html

『陸』 python的socket怎麼使用

http://www.pythontab.com/html/2013/pythonhexinbiancheng_0427/377.html

『柒』 python中如何去學習那些socket

這個星期剛剛用Python寫了幾個 ping,dns(UDP 53)掃描以及tcp埠掃描的程序,總結有以下幾點:
1. 多線程,一個線程負責發,一個線程負責收
2. 使用raw socket,需要有root許可權,其中ICMP的raw socket需要設置參數告訴kernel IP頭有你的程序添加。我在check sum這里卡了點時間,手裡最好有本網路參考書,《TCP/IP illustrated》最好,在寫代碼之前必須對報文格式以及各欄位做到心中有數。
3. 看看Python的struct/array文檔看看怎麼組包,解包
4. 除非你異常牛逼,否則還是需要debug工具,比如wireshark/tcpmp等工具配合讓你看看自己發出來的包那裡出了問題。如果用GUI的wireshark記得將option中的tcp/ip部分checksum option打開
把代碼貼給你就讓你失去自己動手的樂趣了!呵呵have fun!

『捌』 python socket向客戶端廣播問題

import socket,traceback
host = '2.2.3.5'
port = 85
txt = input("請輸入廣播內容:")
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
s.bind((host,port))
print "Listen on the port 85......"
while True:
try:
sock,addr = s.recvfrom(8192)
print "Receive data from:",addr
s.sendto(txt,addr)#這里就是填寫發送內容的
except (KeyboardInterrupt,SystemExit):
raise
except:
traceback.print_exc()
#未對以上代碼的正確性進行驗證。

閱讀全文

與pythonsocket廣播相關的資料

熱點內容
livecn伺服器地址 瀏覽:255
程序員這個工作真的很吃香嗎 瀏覽:842
程序員和數學分析師待遇 瀏覽:676
壓縮氣彈簧怎麼拆 瀏覽:319
華為公有雲伺服器添加虛擬ip 瀏覽:207
程序員和運營哪個累 瀏覽:22
抖音安卓信息提示音怎麼設置 瀏覽:454
光速虛擬機的共享文件夾 瀏覽:246
程序員培訓機構發的朋友圈真實性 瀏覽:742
天乾地支簡單演算法 瀏覽:299
下載個壓縮文件 瀏覽:298
普通人電腦關機vs程序員關機 瀏覽:628
米酷建站源碼 瀏覽:115
氫氣app怎麼搜搭配 瀏覽:619
pdf綠盟 瀏覽:505
固態硬碟編譯器重建 瀏覽:391
怎樣編輯硬碟文件夾 瀏覽:660
安卓系統如何打開電腦軟體 瀏覽:572
android監聽事件處理 瀏覽:750
h3c伺服器怎麼看功率 瀏覽:122