如何同时发送和接收消息

2024-04-19 07:23:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试学习套接字编程,目前有以下serverclient代码,但问题是服务器和/或客户端不能同时发送和接收消息,它们轮流发送和接收消息

我看过下面的例子,但答案似乎不能解决问题,或者我理解错了

Python Socket - Send/Receive messages at the same time

服务器

import socket
import threading
s = socket.socket()
host = socket.gethostname()
port = 8080
s.bind((host, port))
s.listen(1)
print("Waiting for connections")
conn, addr = s.accept()
print("Client has connected")
conn.send("Welcome to the server".encode())

def recv_msg():
    while True:
        recv_msg = conn.recv(1024)
        if not recv_msg:
            sys.exit(0)
        recv_msg = recv_msg.decode()
        print(recv_msg)

def send_msg():
    send_msg = input(str("Enter message: "))
    send_msg = send_msg.encode()
    conn.send(send_msg)
    print("message sent")

while True:
    send_msg()

t = threading.Thread(target=recv_msg)
t.start()

客户

import socket
import threading
s = socket.socket()
host = socket.gethostname()
port = 8080
s.connect((host, port))
print("Connected to the server")
message = s.recv(1024)
message = message.decode()
print(message)

def recv_msg():
    while True:
        recv_msg = s.recv(1024)
        if not recv_msg:
            sys.exit(0)
        recv_msg = recv_msg.decode()
        print(recv_msg)

def send_msg():
    send_msg = input(str("Enter message: "))
    send_msg = send_msg.encode()
    s.send(send_msg)
    print("Message sent")

while True:
    send_msg()

t = threading.Thread(target=recv_msg)
t.start()

我正在尝试创建一个类似Whatsapp/Imessage等的聊天应用程序(使用kivy),我还没有找到关于如何创建聊天室的教程(我看到的所有教程都是关于创建聊天室的),因此如果有人看到过,我将不胜感激


Tags: importsendtruehostmessageserverportdef
1条回答
网友
1楼 · 发布于 2024-04-19 07:23:02

在客户机和服务器中,在运行循环之前必须启动线程while True: send_msg()

t = threading.Thread(target=recv_msg)
t.start()

while True:
    send_msg()

编辑:

server.py

import socket
import threading
import sys

#  - functions  -

def recv_msg():
    while True:
        recv_msg = conn.recv(1024)
        if not recv_msg:
            sys.exit(0)
        recv_msg = recv_msg.decode()
        print(recv_msg)

def send_msg():
    while True:
        send_msg = input(str("Enter message: "))
        send_msg = send_msg.encode()
        conn.send(send_msg)
        print("message sent")

#  - main  -

host = socket.gethostname()
port = 8080

s = socket.socket()
s.bind((host, port))
s.listen(1)

print("Waiting for connections")
conn, addr = s.accept()

print("Client has connected")
conn.send("Welcome to the server".encode())

# thread has to start before other loop
t = threading.Thread(target=recv_msg)
t.start()

send_msg()

client.py

import socket
import threading
import sys

#  - functions  -

def recv_msg():
    while True:
        recv_msg = s.recv(1024)
        if not recv_msg:
            sys.exit(0)
        recv_msg = recv_msg.decode()
        print(recv_msg)

def send_msg():
    while True:
        send_msg = input(str("Enter message: "))
        send_msg = send_msg.encode()
        s.send(send_msg)
        print("Message sent")

#  - main  -

host = socket.gethostname()
port = 8080

s = socket.socket()
s.connect((host, port))

print("Connected to the server")

message = s.recv(1024)
message = message.decode()
print(message)

# thread has to start before other loop
t = threading.Thread(target=recv_msg)
t.start()

send_msg()

相关问题 更多 >