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代码少不少?
了解下,为后来自己搭建后台服务器打个基础。
能明白多少就明白多少,大不了自己多敲几遍。
代码和工具
- Python学习笔记——socket通信
- iOS学习笔记04—socket通信
- socket通信学习笔记
- <34>python学习笔记——Socket
- Python学习总结笔记(8)-- Socket通信初探
- APUE学习笔记——socket通信 阻塞IO
- Android 学习笔记9——socket通信
- 《iOS学习笔记—OC中的Socket通信》
- java socket通信学习笔记
- python学习笔记--socket
- python学习笔记——线程间通信Event
- python学习笔记——线程间通信Event
- Python学习笔记——Http通信requests请求
- Python学习笔记三--socket
- python学习笔记6-socket
- python学习笔记 socket、socket server
- iOS学习笔记1- Socket通信
- Java学习笔记-----Socket全双工通信
- Java GC 相关
- 一个简单的倒计时
- 【c/c++】完成端口服务器中转实现两个客户端之间通信
- 堆
- 编程调用Revit自己提供的命令
- Python学习笔记——socket通信
- 23种设计模式(14)-模板方法模式
- wpf弹出窗,被主界面遮挡问题解决办法
- java 字节流与字符流的区别
- Redis和Memcached的区别
- shell paste指令:用于不同文件的合并粘贴
- Google VR Android开发(二)-Simplevideowidget分析
- python:线程的使用、线程共享全局变量、列表作为参数(全局变量)、避免全局变量被修改
- 比较forward动作指令和include动作指令