前言.
这个程序救了我一命,具体的后面再说
正文.
作用.
没啥好说的,作用肯定就是数据传输了,而且这个文件配合一些操作,甚至可以实现传文件
导入.
这次要用到一个很强大的python第三方库——socket
不用非常仔细地去研究这个库,不过还是要背一些东西的
UDP协议
今天就要用这个协议来传输
作为一种无连接协议,UDP他只管发送,不管接收(或者只管接收,不管发送),说白了就是我发出去就行了,接没接到关我屁事。也就是说,它可以绑定到任意端口(无论开没开),也能发送数据到任意端口。众所周知,一台机器不是所有端口都打开的(也许有,反正我没见过),而利用UDP的无连接特性,可以完美解决这种因为端口没打开而无法传输的问题,这也是为什么今天要用UDP。
TCP协议
这是一种有连接协议
这个需要目标机器开启,且目标端口开启,如果没开启会连接失败,而且如果你连接成功,但是如果程序运行完了,你却没关闭连接,就会导致端口占用,然后就不能再连接了(除非手动关闭)。
思路.
如果要实现你说一句,我回一句,但如果你不说,我也不能说,你说完,我才能说,而且我不说完,你发的所有信息我都接收不到的这种功能,只用写一种程序。但想实现像微信、QQ那样实时传输,就要写两个(也不复杂,一个接收、一个发送,搞懂原理后其实很简单)
需要用到的部分工具.
1.socket
这里详细讲一下socket
socket可以指定协议,修改默认参数,发送、绑定、接收等等
首先是指定协议
你需要把协议指定到一个变量(变量名不能是python关键字,之前我用了python关键字socket,导致无法发送),如把UDP协议指定给变量s:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
AF_INET指我们要用IPv4(类似123.123.123.123这种,IPv6是aa:aa:aa:aa:aa:aa这种),SOCK_DGRAM指UDP协议
这样就可以用s变量来做一些操作了
然后是修改默认参数
修改默认参数在UDP里作用不大,比较常用的只有一条:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
这个可以设置端口复用,避免出现address already in use(端口被占用)
接着是发送、绑定、接收
首先是发送
发送需要指定发送内容(需要是字节,不能是其他类型)、目标IP(不必开启)、目标端口(不必开放),如我想发送"Hello"到192.100.100.100的12345端口:
client = 'Hello'
s.sendto(client.encode(), ('192.100.100.100', 12345))
client.encode()指把字符串类型的'Hello'转为字节类型
其实字节也可以用b'Hello'来表示,b表示bytes(字节)
(b''里面的东西不能是中文,不过client变量里面倒是能填中文,然后用encode来转换)
然后是绑定
用bind函数(感觉像谐音)
bind需要指定IP和端口,如我要绑定到192.160.100.100的123端口&