版权声明:之江学院 黄日超 https://blog.csdn.net/weixin_41474319/article/details/80890787
用socket库制作一个网内联机通讯系统,加深你对物联网应用里的消息传递的理解。
我用的是python3.6.2 自带 socket库 导入时直接from socket import * 就可以使用。
socket是一个常用的客户端将字符串转成字节传输,服务器端收到后,将字节转成字符串接收的二进制通讯协议.
用socket写出来的程序有点类似与一个简易的聊天软件,我们可以通过该程序跟同一个局域网内的另外一台机子的使用者聊天。我并没有深入研究里面的机制,目前只能实现你一句我一句地聊,还不能完全实现全双工的通讯。
我把自己的笔记本当客户端,把树莓派当服务器端:
客户端代码里要设置对方局域网内的IP,通讯用的端口建议大于10000,缓冲大小1024-10240都可以
## main.c
## test3
##
## Created by 黄日超 on 2018/5/6.
## Copyright © 2018年 黄日超 . All rights reserved.
##
from socket import *
host = '192.168.0.155' # 这是对方的ip
port = 13141 #接口选择大于10000的,避免冲突
bufsize = 1024 #定义缓冲大小
addr = (host,port) # 元祖形式
udpClient = socket(AF_INET,SOCK_DGRAM) #创建客户端
while True:
data = input('发送消息给对方:')
data = data.encode(encoding="utf-8")
udpClient.sendto(data,addr) # 发送数据
data,addr = udpClient.recvfrom(bufsize) #接收数据和返回地址
data=data.decode(encoding="utf-8")
print('收到对方的消息',data)
udpClient.close()
代码里的host就是接收端的IP,这个怎么查呢,我的接收端是树莓派,我把笔记本和树莓派都连到我的手机热点上。
然后通过手机热点管理查看树莓派的ip,当然,代码里的hostIP是我把树莓派连到实验室无线网后的ip,跟下图的IP不一样。
服务器端不必设置IP,但port端口一定要和发送端一模一样,缓冲大小最好一样
#!/usr/bin/env python
from socket import *
#from time import ctime
host = '' #监听所有的ip
port = 13141 #接口必须一致
bufsize = 1024
addr = (host,port)
udpServer = socket(AF_INET,SOCK_DGRAM)
udpServer.bind(addr) #开始监听
print('------开始聊天------')
while True:
data,addr = udpServer.recvfrom(bufsize) #接收数据和返回地址
#处理数据
data = data.decode(encoding='utf-8').upper()
print('收到对方的消息:'+data)
data =input('发送消息给对方:')
udpServer.sendto(data.encode(encoding='utf-8'),addr)
#发送数据
udpServer.close()
把运行二者的机子连在同一个无线网内,测试效果如下:
笔记本显示屏截图
树莓派显示屏截图
快点动手尝试下吧!