首页 > 使用Python的SocketServer,服务器端无法接受客户端发送的消息

使用Python的SocketServer,服务器端无法接受客户端发送的消息

我最近在学习Python的socket编程,想使用SocketServer模块实现一个简单的消息收发,client端向server端发送一条消息,然后server端在把这条消息发送会client端。但是启动server后,再启动client,使用client向server发送消息,server端始终接受不到,直接使用telnet命令连接server却能接收到消息并能返回消息。
我是用的Windows7系统,Python2.7版本
server端代码:

# -*- coding:utf-8 -*-

from SocketServer import TCPServer, ThreadingMixIn, StreamRequestHandler
import time

class Server(ThreadingMixIn, TCPServer):
    pass


class MyHandler(StreamRequestHandler):
    def handle(self):
        addr = self.request.getpeername()
        print "Get connection from", addr
        data = self.rfile.readline().strip().decode('utf-8')
        print data
        if data == 'quit':
            self.request.close()
        else:
            self.wfile.write((data + "\r\n").encode('utf-8'))


    def finish(self):
        self.wfile.write('Someone has left the chatting room')

host = '127.0.0.1'
port = 1234
server = Server((host, port), MyHandler)
server.serve_forever()

client端代码:

# -*- coding:utf-8 -*-

import socket
import threading
import sys


data = ''
nick = ''

def send_msg(sock):
    global data, nick
    while True:
        data = sys.stdin.readline().strip()
        sock.send(data)


def recv_msg(sock):
    while True:
        temp = sock.recv(1024)
        print temp


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 1234))
ick = raw_input("Please input your nickname: ")


threading.Thread(target=send_msg, args=(s,)).start()
threading.Thread(target=recv_msg, args=(s,)).start()

说明以下:代码并不一定完全正确,目前问题是使用client向server发送消息,server端会卡在data = self.rfile.readline().strip().decode('utf-8')
程序不再继续。
启动client并发送消息:

此时serve端仅有链接成功提示,没有收到输入的Hello:

但是直接使用telnet命令却可以在serve端收到消息并返回:

server端:

而且将client端关闭会报出如下错误:

为什么在启动client并向server发送消息后server端接受不到并卡在读取那一步?
望前辈、大神们指点一二,多谢


改一下:sock.send(data+'\n')

【热门文章】
【热门文章】