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())就可以了。【其实书上也是这样写的....】
服务器端:
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())就可以了。【其实书上也是这样写的....】
相关文章推荐
- 关于Python2的一点想法以及遇到的问题
- windows 环境下 python 安装matplotlib
- python学习之字符串(上)
- Python 基础学习(一)
- python如何处理解析word文档doc docx , python-docx,python-docx2txt,zipfile
- python numpy教程
- 栅栏加解密python实现(支持密钥加密)
- python(4)
- Python中的单步调试
- python的模块安装
- python开发学习-day01 (python安装与版本、字符串、字典、运算符、文件)
- python字典访问的三种方法
- python3.4 Windows 安装配置pip
- python基础(google map api)
- Mac os 安装 MySQL和MySQL-Python
- python与逻辑回归
- python 内建模块
- Python Access学习(一)
- 【python学习笔记】用正则表达式从含中文的网页中提取数据(含编码转换)
- 学习Python编程的11个资源