我想定义一个函数来创建套接字,将套接字绑定到特定的地址和端口,从源代码(不间断地)获取数据,然后返回这个套接字,这样我就可以在其他函数中使用它了。有可能吗?如果是,我该怎么做
我想多线程socket_analyser
,它是否也意味着多线程socket_receiver
问题是在调用socket_creator
之后,函数不会返回sock
。当我试图把它传递给socket_analyser
中的socket_receiver
时,它给参数sock
加下划线,表示它没有定义
我还试图在socket_creator(MCAST_GRP[0],MCAST_PORT)
之后定义testsocket = sock
,将其传递给socket_receiver(testsock, BUFFER_UDP)
,但是结果是一样的
import socket
import struct
import time
import threading
MCAST_GRP = ['239.0.1.104','239.0.1.105']
MCAST_PORT = 12345
BUFFER_UDP = 2048
def socket_creator(multicast_group, multicast_port):
MCAST_GRP = multicast_group
MCAST_PORT = multicast_port
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
return sock
#testsocket = sock
def socket_receiver(sockett, bufferUDP):
BUFFER_UDP = bufferUDP
sock_rcv = sockett
for x in range(10):
data, address = sock_rcv.recvfrom(BUFFER_UDP)
totalSize += len(data)
return totalSize
def socket_analyser(multicast_group, multicast_port, totalSize):
print("_____.:| Starting analysis! |:._____\n")
print("͞◌͞◌͞◌͞◌͞.:| IP: {} PORT: {} |:.͞◌͞◌͞◌͞͞◌͞◌".format(multicast_group,multicast_port))
socket_analyser(sock, BUFFER_UDP)
print(totalSize)
totalSize = 0
socket_creator(MCAST_GRP[0],MCAST_PORT)
socket_creator(MCAST_GRP[1],MCAST_PORT)
t1 = threading.Thread(target=socket_analyser, args=(MCAST_GRP[0],MCAST_PORT,BUFFER_UDP, sock))
t2 = threading.Thread(target=socket_analyser, args=(MCAST_GRP[1],MCAST_PORT,BUFFER_UDP, sock))
t1.start()
t2.start()
t1.join()
t2.join()
print('End of test')
time.sleep(5)
提前谢谢你让我更接近解决方案
我在代码中看到了一些逻辑问题
我只是修改了一些东西
相关问题 更多 >
编程相关推荐