我真的很擅长使用python中的线程进行套接字编程。由于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)。