Как запустить многопоточность в python для программирования многопользовательских сокетов? - PullRequest
1 голос
/ 27 января 2020

В этом коде, когда я пытался без применения многопоточности на сокете python, он работает отлично. Но после использования многопоточности для параллелизма первое время l oop работает нормально, но когда 2-е время, пока l oop не работает, пока я не закрою соединение, таким образом, для 2-го потока l oop будет 2-й поток, который не завершает процедуру отправки пароля на android. Здесь проблема в том, что 2-й l oop как 2-й поток. Как я это сделаю? Любая помощь будет оценена!

import mysql.connector as mysql 
import socket
import sys 
import json
import threading



class ClientThread(threading.Thread):
    def __init__(self,clientAddress,clientsocket):
        threading.Thread.__init__(self)
        self.csocket = clientsocket
        self.addr = clientAddress
        print ("New connection added: ", clientAddress)

    def run(self):
        print ("Connection from : ", self.addr)
        #self.csocket.send(bytes("Hi, This is from Server..",'utf-8'))
        msg = ''

        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((LOCALHOST, PORT))
print("Server started")
print("Waiting for client request..")
while True:
    s.listen(5)
    clientsock, clientAddress = s.accept()
    newthread = ClientThread(clientAddress, clientsock)
    newthread.start()

1 Ответ

1 голос
/ 11 февраля 2020

Я решил эту проблему, так как мой вывод также будет идти так, как я хочу. Базовая c идея решения приведена ниже: -

import socket, threading

class ClientThread(threading.Thread):
    def __init__(self,clientAddress,clientsocket):
        threading.Thread.__init__(self)
        self.csocket = clientsocket
        print ("New connection added: ", clientAddress)
    def run(self):
        print ("Connection from : ", clientAddress)
        #self.csocket.send(bytes("Hi, This is from Server..",'utf-8'))

        while True:
            data = self.csocket.recv(1024).decode('utf-8')
            print(data)
            #print('its not data')

            self.csocket.send(b'This is from server side')
            break

        #self.csocket.close()


        #
LOCALHOST = "127.0.0.1"
PORT = 8080
server = socket.socket(socket.AT, F_INEsocket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind((LOCALHOST, PORT))
print("Server started")
print("Waiting for client request..")
while True:
    server.listen(10)
    clientsock, clientAddress = server.accept()
    newthread = ClientThread(clientAddress, clientsock)
    newthread.start()
...