导航:首页 > 编程语言 > 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广播相关的资料

热点内容
支持dsd硬解压声卡 浏览:768
怎么查看u盘加密区 浏览:181
台电加密是什么格式 浏览:155
php论坛版块在哪个文件夹 浏览:442
暗黑的服务器为什么维护 浏览:623
android内存溢出的原因 浏览:17
标志307的压缩比是多少 浏览:636
服务器启动为什么叫三声 浏览:997
追风筝的人英文pdf 浏览:939
解压小熊手机壳 浏览:346
成都市区建成面积算法 浏览:660
智能家居单片机 浏览:97
买男装用什么app好 浏览:855
文件夹合并了怎么拆开 浏览:260
波段副图源码无未来函数 浏览:89
livecn服务器地址 浏览:259
程序员这个工作真的很吃香吗 浏览:847
程序员和数学分析师待遇 浏览:681
压缩气弹簧怎么拆 浏览:325
华为公有云服务器添加虚拟ip 浏览:211