您的位置:首页 > 编程语言 > Python开发

Python学习——socketservice例子的一个问题

2015-12-27 21:43 591 查看
按《Python核心编程》中的socketservice例子,敲了一遍代码,除了转换为Python 3遇到的字符编码问题,以及python 3中该模块名字为socketservice而不是SocketService的问题外,服务器端代码和客户端代码运行后,发现均没有打印出时间标签。

服务器端:

from socketserver import (TCPServer as TCP, StreamRequestHandler as SRH)
from time import ctime

HOST = ''
PORT = 21567
ADDR = (HOST, PORT)

class MyRequestHandler(SRH):
def handle(self):
print('...connected from: ', self.client_address)
self.wfile.write(('[%s] %s' % (ctime(), self.rfile.readline().decode())).encode())
print('send')

tcpServ = TCP(ADDR, MyRequestHandler)
print('waiting for connection...')

tcpServ.serve_forever()

客户端:
from socket import *

HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

while True:
tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)
data = input('> ')
if not data:

break
tcpCliSock.send(('%s' % data).encode())
data = tcpCliSock.recv(BUFSIZ).decode()
if not data:
break
print(data)
tcpCliSock.close()

打断点,发现服务器并没有运行到
self.wfile.write(('[%s] %s' % (ctime(), self.rfile.readline().decode())).encode())这一行。也即是客户端连接上后,数据并没有发送出去。
仔细看客户端的代码,结合书上的描述,发现是客户端的这句代码出现问题:

tcpCliSock.send(('%s' % data).encode())将字符串发送到客户端,然而客户端使用的接收函数是self.rfile.readline(),和读取文件相似,判断一行的方法是行末的回车和换行符。所以上面这句代码修改成:
tcpCliSock.send(('%s\r\n' % data).encode())就可以了。【其实书上也是这样写的....】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息