0

我是 Python 中套接字连接的服务器和客户端,

客户:

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)

我现在的方式是,如果您在一个客户端上说什么,它会向两个客户端发送“字母”,但其他客户端在等待 stdin.readline() 发生之前不会收到该消息,直到他们发送新消息. 我想知道如何做到这一点,以便客户端始终从服务器接收数据,并且无需先发生 stdin.readline() 就可以看到它。

谢谢

4

1 回答 1

2

按照 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()
于 2015-07-05T17:50:52.293 回答