python实现数据传输

本文介绍了使用Python的socket库实现UDP协议的数据传输,包括发送、接收、绑定和端口复用等操作。通过示例代码展示了如何创建UDP服务端和客户端,强调了UDP无连接特性的优势,并提及了TCP协议的有连接特性。此外,还提到了open函数在文件操作中的应用。
摘要由CSDN通过智能技术生成

前言.

        这个程序救了我一命,具体的后面再说

正文.

        作用.

                没啥好说的,作用肯定就是数据传输了,而且这个文件配合一些操作,甚至可以实现传文件

        导入.

                这次要用到一个很强大的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端口&

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值