python3网络编程

今天学习了下python核心编程中的网络编程,话不多说,进入正题


环境:python3 win7 64位


先是tcp的客户端

from socket import *
from time import ctime

HOST = '10.254.7.26'
PORT = 12345
BUFSIZE = 1024

tcpsocket = socket(AF_INET, SOCK_STREAM)
tcpsocket.bind((HOST, PORT))
tcpsocket.listen(5)

while True:
    print('wait for connection......')
    tcpclisock, addr = tcpsocket.accept()
    print('connected from:', addr)

    while True:
        data = tcpclisock.recv(BUFSIZE)
        if data == 'quit':
            break
        print(data, 'from', addr)
        tcpclisock.send('[%s] %s' % (bytes(ctime(), 'utf-8'), data))

    tcpclisock.close()
tcpsocket.close()
然后是tcp客户端

from socket import *
from time import ctime

HOST = '10.254.7.26'
PORT = 12345
BUFSIZE = 1024

tcpsocket = socket(AF_INET, SOCK_STREAM)
tcpsocket.connect((HOST, PORT))

while True:
    data = input()
    if data == 'quit':
        break
    tcpsocket.send(data)
    data = tcpsocket.recv(BUFSIZE)
    if not data:
        break
    print(data.decode('utf-8'))
tcpsocket.close()
由于书上有专门的python3代码演示,比较开心,毕竟有些地方python2和3不兼容。

接下来跑下服务器和客户端:

完美,已经连上了,然后在客户端输入点东西试试:



WTF?客户端服务器都炸了

让我们看下错误原因a bytes-like object is required, not 'str',意思是该方法需要byte类型的而我们给了str类型的,还好有点编码的知识,修改下客户端的代码:

tcpsocket.send(bytes(data, 'utf-8'))


客户端还是直接挂掉了,但是却没有报错,我们看到服务器这边能得到发送的消息了(上次是空的),错误和客户端类似?那还是编码的问题,简单!

修改服务器代码:

tcpclisock.send('[%s] %s' % (bytes(ctime(), 'utf-8'), bytes(data, 'utf-8')))

然后继续跑:


这个错误就不是很清楚了,我想大概意思是需要str参数却没有?

这个时候我注意到recv()和send()应该传的都是byte类型的(联想到我们第一次改客户端代码的编码问题),也就是说data已经是byte类型的了,不需要这样再强转,而send发送的似乎是str类型的,我们再次修改代码:

tcpclisock.send(b'[%s] %s' % (bytes(ctime(), 'utf-8'), data))

成功!书上的代码也不一定对,看来还是需要多实践。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值