1

私は、いくつかの入力を受け取り、接続を失わないようにする必要がある単純な Python ソケット サーバーとクライアントを実行しています。1 つのコマンドを入力できますが、応答を受信した後、接続が失われます。どうすれば生き続けることができますか?

クライアントコード

import socket  
import sys 
try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except sockets.error , msg:
    print 'Failed to create socket, Error code:' + str(msg[0]) + ' , Error message :' +     msg[1]
    sys.exit()

print 'Socket Created'

host = '127.0.0.1'
port = 8888
try:
    remote_ip = socket.gethostbyname( host )

except socket.gaierror:

    print 'Hostname could not be resolved. Exiting'
    sys.exit()

print 'Ip address of ' + host + ' is ' + remote_ip

s.connect((remote_ip , port))

print 'Socket Connected to ' + host + ' on ip ' + remote_ip

message = raw_input('Sladu inn skipun :')

try :
   s.sendall(message)
except socket.error:
   print 'Send failed'
   sys.exit()

print 'Message send successfully'

reply = s.recv(4096)

print reply

s.close()

サーバーコード

#!/usr/bin/env python
# -*- coding: utf-8 -*- 
import socket
import sys
from thread import *
import glob

HOST = ''   # Symbolic name meaning all available interfaces
PORT = 8888 # Arbitrary non-privileged port

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'

try:
    s.bind((HOST, PORT))
except socket.error , msg:
    print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
    sys.exit()

print 'Socket bind complete'


s.listen(10)
print 'Socket now listening'


def clientthread(conn):

    while True:
        data = conn.recv(1024)
        if data == "show dir":
            reply = glob.glob('*.*')
        else: 
           reply ="Þessi skipun hefur ekki verið forrituð"
           if not data:
              break

        conn.send(str(reply))


while 1:

    conn, addr = s.accept()
    print 'Connected with ' + addr[0] + ':' + str(addr[1])


    start_new_thread(clientthread ,(conn,))

s.close()
4

1 に答える 1

4

サーバーコードは問題ないようです。しかし、クライアントはメッセージを 1 つだけ送信してから終了しています。接続を閉じます。

クライアント コードで次のようなことを試してください。

while True:
    message = raw_input('Sladu inn skipun :')
    try :
        s.sendall(message)
        print s.recv(1024)
    except socket.error:
        print 'Send failed'
        sys.exit()
于 2013-09-17T22:43:59.413 に答える