0

こんにちは、サーバーとクライアント間のピア ツー ピア チャット用の簡単なチャット プログラムを作成しています。このコードはクライアント側で機能し、クライアントはメッセージを送信でき、サーバーはそのメッセージを受け取ります。しかし、サーバー側でメッセージを送信したい場合、40行目にエラーがあります

  File "server.py", line 40, in <module>
    newSocket.send('\r<Server>: ' + msg)
    socket.error: [Errno 32] Broken pipe

そしてサーバークラッシュ。

サーバー:

import socket
import os
import select
import sys

def prompt():
    sys.stdout.write('Server :  ')
    sys.stdout.flush()

try:
    newSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    newSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
except:
    print 'socket Error'
    sys.exit(1)

newSocket.bind(('127.0.0.1', 8000))
newSocket.listen(5)

input_list = [newSocket, sys.stdin]

print 'Chat Program'
prompt()

while True:

    inputready, outputready, exceptready = select.select(input_list,[],[])

    for sock in inputready:

        if sock == newSocket:
            (client, (ip, port)) = newSocket.accept()
            input_list.append(client)
            data = client.recv(2048)
            if data:
                sys.stdout.write(data)

        elif sock == sys.stdin:
            msg = sys.stdin.readline()
            newSocket.send('\r<Server>: ' + msg)
            prompt()

        else:
            data = sock.recv(2048)
            if data:
                sys.stdout.write(data)

newSocket.close()

クライアント :

import socket
import os
import select
import sys

def prompt():
   sys.stdout.write('Client ')
   sys.stdout.flush()


try:
    newSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    newSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
except:
    print 'socket Error'
    sys.exit(1)


newSocket.connect(('127.0.0.1', 8000))

print 'Connected to remote host. Start sending messages'
prompt()

while 1:

    socket_list = [sys.stdin, newSocket]

    read_sockets, write_sockets, error_sockets = select.select(socket_list, [], [])

    for sock in read_sockets:
        if sock == newSocket:
            data = sock.recv(4096)
            if not data:
                print '\nDisconnected from chat server'
                sys.exit()
            else:
                sys.stdout.write(data)
                prompt()
        else:
            msg = sys.stdin.readline()
            newSocket.send('\r<Client>: ' + msg)
            prompt()
4

2 に答える 2

1

を使用する必要がありますaccept()newSocketあなたがそれをしようとすると、出力する準備ができていないようです.send()

于 2013-09-13T13:22:25.567 に答える