Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python套接字调用main.py中的server.py和client.py_Python_Tcpclient_Tcpserver_Tcpsocket - Fatal编程技术网

Python套接字调用main.py中的server.py和client.py

Python套接字调用main.py中的server.py和client.py,python,tcpclient,tcpserver,tcpsocket,Python,Tcpclient,Tcpserver,Tcpsocket,我的问题是,如何在main方法中顺序调用服务器和客户端 问题是python调试器正在等待并被吸入调用服务器的队列(阻塞调用客户机的队列) 我试过穿线,但没有工作。谢谢你的关注 重要提示:下面的代码使用Python2 主python文件: import xClient import xServer import threading tempServer=xServer tempClient=xClient thrMain = threading.Thread(target=tempServe

我的问题是,如何在main方法中顺序调用服务器和客户端

问题是python调试器正在等待并被吸入调用服务器的队列(阻塞调用客户机的队列)

我试过穿线,但没有工作。谢谢你的关注

重要提示:下面的代码使用Python2

主python文件:

import xClient
import xServer
import threading

tempServer=xServer

tempClient=xClient

thrMain = threading.Thread(target=tempServer.innerClient.Main())
thrMain.start()
thrMain.join()

tempClient.innerClient.Main()
xClient.py:#标准客户端代码,工作正常

import socket
import time

class innerClient:
    def Main():
        time.sleep(2)
        host = '127.0.0.1'
        port = 12345
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((host, port))
        message = "test message"
        while True:
            s.send(message.encode('ascii'))
            data = s.recv(1024)
            print('Received from the server :', str(data.decode('ascii')))


            ans = raw_input('Continue(y/n) :')
            if ans == 'y':
                continue
            else:
                break
        s.close()
import socket
import threading
class innerServer:
    print_lock = threading.Lock()

    # thread fuction
    def threaded(c):
        while True:
            data = c.recv(1024)
            if not data:
                print('See you later')
                print_lock.release()
                break
            data = data[::-1]
            c.send(data)
        c.close()

    def Main():
        host = ""
        port = 12345
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.bind((host, port))
        print("socket binded to post", port)
        s.listen(5)
        print("socket is listening")
        while True:
            c, addr = s.accept()
            print_lock.acquire()
            print('Connected to :', addr[0], ':', addr[1])

            thr = threading.Thread(target=threaded, args=(c,))
            thr.start()
            thr.join()
        s.close()
xServer.py:#标准服务器代码,工作正常

import socket
import time

class innerClient:
    def Main():
        time.sleep(2)
        host = '127.0.0.1'
        port = 12345
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((host, port))
        message = "test message"
        while True:
            s.send(message.encode('ascii'))
            data = s.recv(1024)
            print('Received from the server :', str(data.decode('ascii')))


            ans = raw_input('Continue(y/n) :')
            if ans == 'y':
                continue
            else:
                break
        s.close()
import socket
import threading
class innerServer:
    print_lock = threading.Lock()

    # thread fuction
    def threaded(c):
        while True:
            data = c.recv(1024)
            if not data:
                print('See you later')
                print_lock.release()
                break
            data = data[::-1]
            c.send(data)
        c.close()

    def Main():
        host = ""
        port = 12345
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.bind((host, port))
        print("socket binded to post", port)
        s.listen(5)
        print("socket is listening")
        while True:
            c, addr = s.accept()
            print_lock.acquire()
            print('Connected to :', addr[0], ':', addr[1])

            thr = threading.Thread(target=threaded, args=(c,))
            thr.start()
            thr.join()
        s.close()

如果调用
thrMain.join()
,则在线程(运行服务器)退出之前,执行不会继续执行该行。如果希望服务器和客户端同时运行,则不需要加入服务器线程。我尝试了您的建议,但在调试代码时,它在这一行代码中出现阻塞:thrMain=threading.thread(target=tempServer.innerClient.Main())它甚至无法通过thrMain.start()因此,在服务器调用方法之后,任何一行代码都不会工作。
threading.Thread(target=tempServer.innerClient.Main())
意味着立即调用
Main()
,并将其结果用作在线程中运行的函数。摆脱
()
。这就是你这个疯狂的程序员的答案。很长一段时间后,感谢您的关注。