Как отправить данные с client1 на client2, используя python, и он должен обрабатывать соединение / переподключение - PullRequest
0 голосов
/ 14 сентября 2018

Я могу получить данные с локального компьютера и могу отправить их на сервер, используя этот код. Этот процесс может получить данные для моего другого клиента, но не удается отправить на локальный 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...