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)

私が今持っている方法では、1つのクライアントで何かを言うと、両方のクライアントに「アルファベット」を送信しますが、他のクライアントは 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 に答える