Python: 2 sockets sent from A to B and from B to A

I have been working on this for 2 days, and so far I have not been able to get it to work correctly.

I wanted to write an application that uses 2 sockets with a middle in the middle

This media is a script that must read from socketA and write to SocketB and read from SocketB and write to SocketA.

However, it seems I can not nail him.

My script accepts connections at startup, but it will not allow me to enter anything on the telnet screen.

I use 2 shared lists between sockets for data transfer.

#!/usr/bin/env python import sys import arduinoReadThread import arduinoWriteThread import socket import thread bolt = 0 socketArray=list() HOST ="" HOST2="" PORT1 =50115 PORT2 =50125 s1=socket.socket(socket.AF_INET, socket.SOCK_STREAM ) #create an INET, STREAMing socket s1.bind((HOST,PORT1)) #bind to that port s1.listen(2) #listen for user input and accept 1 connection at a time. socketArray.append(s1) s2=socket.socket(socket.AF_INET, socket.SOCK_STREAM ) #create an INET, STREAMing socket s2.bind((HOST2,PORT2)) #bind to that port s2.listen(2) #listen for user input and accept 1 connection at a time. socketArray.append(s2) print "sockets set up" s1ToWriteList = list() s2ToWriteList = list() def socketFunctionWrite1(): while(bolt == 0): client, address = s1.accept() print "Writing connections" if len(s1ToWriteList) > 0: client.send(s1ToWriteList.pop(0)) def socketFunctionRead1(): while(bolt == 0): client2, address = s2.accept() f = client2.recv(1024) print "reading connection" s1ToWriteList.append(f) print len(s1ToWriteList) def socketFunctionWrite2(): while(bolt == 0): client2, address = s2.accept() print "Writing connections" if len(s2ToWriteList) > 0: client2.send(s2ToWriteList.pop(0)) def socketFunctionRead2(): while(bolt == 0): client, address = s1.accept() f = client.recv(1024) print "reading connection" s2ToWriteList.append(f) print len(s2ToWriteList) def shutDown(): test = raw_input("Quit ?") if(test =="y"): bolt = 1 else: shutDown() def spreadSockets(): thread.start_new_thread(socketFunctionRead1,()) print "launch 1" thread.start_new_thread(socketFunctionRead2,()) print "launch 2" thread.start_new_thread(socketFunctionWrite1,()) print "launch 3" thread.start_new_thread(socketFunctionWrite2,()) print "launch 4" spreadSockets() while(True): pass 
+4
source share
1 answer

Used your exact code and it worked for me. I think that you may be mistaken - this is a telnet with the wrong IP. Do not use "localhost" or 127.0.0.1, you need to use the actual (internal) IP of your field.

If on linux you can see if there are with ifconfig -a or ipconfig /all in windows.

Code execution is accurate, unchanged (with the exception of deleting an unknown import at the top):

Running script:

 [ 15:01 jon@hozbox.com ~/SO/python ]$ ./sock.py sockets set up launch 1 launch 2 launch 3 launch 4 Writing connections Writing connections ^CTraceback (most recent call last): File "./sock.py", line 93, in <module> time.sleep(1) KeyboardInterrupt 

Then telnet'd:

 [ 15:01 jon@hozbox.com ~ ]$ telnet 10.10.1.11 50115 Trying 10.10.1.11... Connected to 10.10.1.11. Escape character is '^]'. Hello, World! Hello 2 ^] telnet> quit Connection closed. [ 15:02 jon@hozbox.com ~ ]$ telnet 10.10.1.11 50125 Trying 10.10.1.11... Connected to 10.10.1.11. Escape character is '^]'. Hello 50125! Hi! ^] telnet> quit Connection closed. [ 15:02 jon@hozbox.com ~ ]$ 

My internal interface configuration ( inet addr:10.10.1.11 ):

 [ 15:07 jon@hozbox.com ~/SO/python ]$ ifconfig eth0 eth0 Link encap:Ethernet HWaddr **:**:**:**:**:** inet addr:10.10.1.11 Bcast:10.10.1.255 Mask:255.255.255.0 ... 
+2
source

Source: https://habr.com/ru/post/1382971/


All Articles