带有线程的Python套接字无法正常工作

时间:2017-10-31 13:03:53

标签: multithreading python-3.x sockets

我真的很擅长使用p​​ython中的线程进行套接字编程。由于input()函数具有阻塞效果,客户端首先完成一条消息,只能等待发送的消息的另一端继续发送消息。所以我认为我可以单独发送和接收,所以我考虑多线程,这是我的代码:

server.py

#-*- coding:utf-8 -*-
from socket import *

import threading

HOST = ""
PORT = 21567
BUFSIZE = 1024
ADDR = (HOST, PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(4)

print("waiting for connection...")
tcpCliSock, addr = tcpSerSock.accept()
print("...connected from:", addr)

def rec(tcpCliSock):
    while True:
        data = tcpCliSock.recv(1024).decode()
        if data == "exit":
            break
        print('From Client:', data)

chat = threading.Thread(target=rec, args=(tcpCliSock, ))
chat.start()

while True:
    data = input(">")
    if data == "exit":
        break
    tcpCliSock.send(data.encode())
tcpSerSock.close()

client.py

#-*- coding:utf-8 -*-
from socket import *

import threading

HOST = "localhost"
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)

def rec(tcpCliSock):
    while True:
        data = tcpCliSock.recv(1024).decode()
        if data == "exit":
        print('From Server:', data)

chat = threading.Thread(target=rec, args=(tcpCliSock, ))
chat.start()

while True:
    data = input(">")
    if data == "exit":
        break
    tcpCliSock.send(data.encode())

tcpCliSock.close()

好吧,这些是我的代码,当我尝试直接在python3.6.1的IDLE中运行它们时,它将无法正常工作,也就是说,当你从客户端向服务器发送消息时,你必须谨慎# 34;输入"在服务器上显示来自客户端的消息,它无法显示immediatelly.it从服务器到客户端的消息是一样的。无法自动显示对我来说很可怕,我对此感到很困惑。

所以请告诉我,如果我希望它们在IDLE中正常工作,我该怎么办。

谢谢你的帮助!

顺便说一句,它们可以在我的笔记本电脑的窗口CMD中运行(64)。

0 个答案:

没有答案