目前无法发送信息系统会在服务器,使用Python的SocketServer,服务器端无法接受客户端发送的消息...

在学习Python的socket编程时,遇到一个使用SocketServer模块创建的server无法从client接收消息的问题。当client通过代码连接server时,server端在读取数据时卡住,但使用telnet命令则可以正常通信。问题可能出在client的发送方式或者server的数据读取处理上。检查client的输入处理和server的数据读取方法以解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我最近在学习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并发送消息:

bVq0jo

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

bVq0jx

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

bVq0ke

server端:

bVq0km

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

bVq0kt

为什么在启动client并向server发送消息后server端接受不到并卡在读取那一步?

望前辈、大神们指点一二,多谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值