关于Python的socket模块,如何让客户机始终接收d

2024-04-23 07:56:47 发布

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

我在Python中为socket连接创建了一个服务器和客户机

客户:

import socket
import sys
from sys import stdin

serv = 'ip goes here'
port = 8888
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((serv, port))


def prompt():
    sys.stdout.write('<You> ')
    sys.stdout.flush()


def send(x):
    sock.sendall(x)
    rec = 0
    ex = len(x)
    while rec < ex:
        data = sock.recv(16)
        rec += len(data)

while 1:
    if sock:
        data = sock.recv(16)
        if len(data) == 0:
            pass
        print '<Server> %s' % data
        prompt()
        msg = stdin.readline()
        sock.sendall(msg)

按照我现在的方式,如果你在一个客户机上说了什么,它会向两个客户机发送“字母表”,但是其他客户机不会收到,直到他们发送一个新的消息,因为它正在等待标准读线()发生。我想知道如何使它,使客户端将始终从服务器接收数据,并将看到它,而不必有标准读线()先发生。你知道吗

谢谢


Tags: import服务器data客户机lenportdefstdin
1条回答
网友
1楼 · 发布于 2024-04-23 07:56:47

通过使用CrazyCasta建议的线程实现了我想要的

def receiving():
    while 1:
        if sock:
            data = sock.recv(16)
            if len(data) == 0:
                pass
            print '<Server> %s' % data


def sending():
    while 1:
        msg = stdin.readline()
        sock.sendall(msg)

t1 = Thread(target=receiving)
t2 = Thread(target=sending)

t1.start()
t2.start()

相关问题 更多 >