[英]How can I return socket created by function and pass it to another?
I would like to define function that creates socket, binds socket to specific address and port, get data from source(incessantly) and then return this socket so I could use it in other function. 我想定义一个函数,该函数创建套接字,将套接字绑定到特定的地址和端口,从源不断获取数据,然后返回此套接字,以便可以在其他函数中使用它。 Is it possible? 可能吗? If so, how can I do that? 如果是这样,我该怎么做?
I would like to multithread socket_analyser
, does it imply multithreading socket_receiver
also? 我想对socket_analyser
使用多线程,是否也暗示对socket_receiver
多线程?
The problem is that after invoking socket_creator
, the function doesn't return sock
. 问题在于,调用socket_creator
,该函数不会返回sock
。 When I try to pass it to socket_receiver
in socket_analyser
it underline parameter sock
saying it's not defined. 当我尝试将其传递给socket_receiver
中的socket_analyser
它在参数sock
下划线表示未定义。
I also tried to define testsocket = sock
just after socket_creator(MCAST_GRP[0],MCAST_PORT)
to pass it to socket_receiver(testsock, BUFFER_UDP)
however - the same result. 我也试图在socket_creator(MCAST_GRP[0],MCAST_PORT)
之后定义testsocket = sock
socket_creator(MCAST_GRP[0],MCAST_PORT)
将其传递给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)
Thank you in advance for anything bringing me closer to the solution 预先感谢您为我提供的解决方案
I am seeing a couple of logical issues in the code 我在代码中看到了几个逻辑问题
I just modified a few things to fix 我刚刚修改了一些要修复的东西
def socket_analyser(BUFFER_UDP, sock):
socket_receiver(sock, BUFFER_UDP)
print(BUFFER_UDP)
sock1 = socket_creator(MCAST_GRP[0],MCAST_PORT)
sock2 = socket_creator(MCAST_GRP[1],MCAST_PORT)
t1 = threading.Thread(target=socket_analyser, args=(BUFFER_UDP, sock1))
t2 = threading.Thread(target=socket_analyser, args=(BUFFER_UDP, sock2))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.