1

私は数ヶ月前から python を自己学習しており、最終的に Socket プログラミングを学習しています。教科書の課題として、半二重チャット システムを設計することになっています。以下はコードです。最初の要求と応答は問題ありませんが、クライアントから 2 番目のメッセージを送信しようとするたびに、サーバーがハングしているように見えます。プログラムは TCP ベースです。

新しいメッセージを送信する必要があるたびに ss.accept() が呼び出されているため、新しいスレッドが作成されているのではないかと疑っていますが、 client から sc.connect() を1回しか呼び出していないため、新しい接続である可能性がありますサーバー側で無限の時間そこにぶら下がっています。

証跡として: while ループの外側で ss.accept() を呼び出しました。

誰かがコードを見て、問題が正確にどこにあるのかを理解してください。

私は学んでいるので、まだツイストに移行していません。フレームワークに移行する前に、まずすべての基本を学びたいです。

     !bin/usr/env python

import socket, sys
HOST =''
PORT = 1060
ADDR =(HOST,PORT)

def userinput(sock):
    usermessage = input('>')
    sock.sendall(str(len(usermessage)))
    return usermessage


def server():
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    s.bind(ADDR)
    s.listen(1)
    print 'the server is listening at',s.getsockname()

    while True:
        ss,sockname = s.accept()    
    #listen to determine the bytes sent by client
        msglen = ss.recv(4096)
    #accept the complete message
        msg = ss.recv(int(msglen))
        print 'client:', repr(msg)
        servermsg = userinput(ss)
        ss.sendall(servermsg)
        print " ---------------"
    ss.close()

def client():
    sc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    sc.connect(ADDR)    
    while True:
        message = userinput(sc)
        sc.sendall(message)
        replylen = sc.recv(4096)
        reply = sc.recv(int(replylen))
        print "reply:",reply

        print "----------------"
    sc.close()

if sys.argv[1:] == ['server']:
    server()

elif sys.argv[1:] == ['client']:
    client()
else:
    print >> sys.stderr,'usage:tcp_2_7.py server|client[host]'
4

1 に答える 1