使用Python的SocketServer,服务器端无法接受客户端发送的消息
巴扎黑
巴扎黑 2017-04-17 16:22:16
[Python讨论组]

我最近在学习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端接受不到并卡在读取那一步?
望前辈、大神们指点一二,多谢

巴扎黑
巴扎黑

全部回复(1)
巴扎黑

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号