Я могу получить данные с локального компьютера и могу отправить их на сервер, используя этот код. Этот процесс может получить данные для моего другого клиента, но не удается отправить на локальный IP-адрес, и я не могу получить переподключение после отключения с любой стороны. Все, что я пытаюсь - это отправить поток данных с устройства, которое находится на стороне клиента 1, на сторону клиента 2, и даже если произойдет разрыв соединения, он сможет восстановить соединение сам.
Код клиента 1:
import sys
import socket
import select
from time import sleep
i = socket.socket()
TCP_IP = 'localip'
TCP_PORT = 511
BUFFER_SIZE = 1024
param = []
host = 'server ip'
port = 10000 # The same port as used by the server
i = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
i.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
connected = True
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((TCP_IP,TCP_PORT))
server.listen(2)
rxset = [server]
txset = []
while True:
try:
# i.connect((host, port))
connected = True
rxfds, txfds, exfds = select.select(rxset, txset, rxset)
for sock in rxfds:
if sock is server:
# i.connect((host, port))
conn, addr = server.accept()
conn.setblocking(0)
rxset.append(conn)
else:
# try:
data = sock.recv(BUFFER_SIZE)
i.sendall(data)
print data
if data:
param.append(data)
except socket.error:
#set connection status and recreate socket
connected = False
i = socket.socket()
print( "connection lost... reconnecting" )
while not connected:
#attempt to reconnect, otherwise sleep for 2 seconds
try:
i.connect( ( host, port ) )
connected = True
print( "re-connection successful" )
except socket.error:
sleep(0)
# finally:
Код сервера:
import socket # Import socket module
from time import sleep
import thread
connected = True
def on_new_client(clientsocket,addr):
while True:
msg = clientsocket.recv(1024)
h.sendall(msg)
print msg
# clientsocket.close()
#########################################################################################################
s = socket.socket() # Create a socket object
host = 'server ip' # Get local machine name
port = 10000 # Reserve a port for your service.
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port)) # Bind to the port
s.listen(5)
# a, addr = s.accept()
# i = 2
# print 'Got connection from', addr
while True:
h, addr = s.accept() # Establish connection with client.
#####################################################################################################
thread.start_new_thread(on_new_client,(h,addr))
Это мой код сервера:
client 2 code:
import socket
import thread
from time import sleep
a = socket.socket()
# msg = '1'
HOST = 'server ip'
PORT = 10000
a = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
a.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# a.connect((HOST, PORT ))
connected = True
server = socket.socket()
TCP_IP = 'local ip'
TCP_PORT = 511
# BUFFER_SIZE = 1024
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.connect((TCP_IP,TCP_PORT))
# connected = True
while True:
try:
connected = True
# a.send(msg)
data = a.recv(1024)
server.send(data)
print data
except socket.error:
connected = False
a = socket.socket()
print( "connection lost... reconnecting" )
while not connected:
try:
a.connect( ( HOST, PORT ) )
connected = True
print( "re-connection successful" )
except socket.error:
sleep(2)