使用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端接受不到并卡在读取那一步?
望前辈、大神们指点一二,多谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
改一下:sock.send(data+'\n')