Python学习笔记——socket通信

来源:互联网 发布:淘宝福袋是死人衣服 编辑:程序博客网 时间:2024/06/05 20:55

建议大家先百度搜索下了解下socket通信和http通信的区别。
我是刚百度过。毕竟学校学的东西早就忘光了。
忘了不可怕,可怕的是忘了却以为自己什么都知道。(很明显,我以前就是这种人 ← 笑哭)

案例一

from socket import *# IPmyhost = ''# 端口号myport = 8080# 新建socketsockobj = socket(AF_INET,SOCK_STREAM)# 绑定地址sockobj.bind((myhost,myport))# 设置最大连接数sockobj.listen(128)while True:    # 接收数据信息,地址信息    connection ,address = sockobj.accept()    # 打印地址信息    print("class of address:"+str(type(address)))    print( "connect by "+str(address))    while True:        # 从数据信息中取1024个字节        data = connection.recv(1024)        # 如果data为空,结束连接        if not data:            break        # 打印data类型        print("class of data:"+str(type(data)))        # 回传信息        rstr =bytes("echo:",encoding='utf-8')+ data        connection.send(rstr)    # 关闭连接    connection.close()

代码相对简单。这是利用原生的socket进行编程的。
结果如下:
这里写图片描述

如果用的是linux系统,直接nc 127.0.0.1 8080 就连接上了,因为我用的是windows,专门下载的nc工具,如果你也是Windows的话,请在文章最后下载压缩包,那里有nc工具和相关代码。

记住新建socket → 绑定地址 → 设置连接数,上面的代码就没有问题了。可以考虑多默写几遍。理解下其中深意。


当然如果你觉得这已经是最简单的了,那你就错了。

接下来我们引入python专门用于socket编程的库来试试。

案例二

这里写图片描述

看看代码,这里有三个地方需要注意下,
1、socketserver 这是python 3.x的,如果你用的是2.x 需要改为SocketServer
2、在返回值的时候,我为了好看加了个回车也就是‘\n’但是需要把转成byte类型才能和data.upper()合到一起回传。
3、一定记住port要int类型,我写的时候写成了‘8080’一只报错,我一脸懵逼都不知道哪里错了。这是错误提示:an integer is required (got type str)

怎么样,引入Python的库,你专注的工作重点就从构造socket转向写自己需要的业务了吧?是不是省了很多事儿?


案例三

以上两个例子都只支持一个客户端,可实际情况下,肯定不止一个啊?

只要把案例二稍微修改下。就搞定了~

这里写图片描述

StreamRequestHandler 是 BaseRequestHandler的一个子类,可以以文件流形式操作来接收和发送byte数据。

这时候我们就可以利用它同时与多个客户端交互了。
结果如下:
这里写图片描述

如上,Python代码少不少?

了解下,为后来自己搭建后台服务器打个基础。
能明白多少就明白多少,大不了自己多敲几遍。

代码和工具

原创粉丝点击