Python的互联网编程
因为我现在才刚学不久
哇!真的吗?大佬求带!
我了解,互联网就是把许多网络连接起来。
em,以前听过,现在有点忘了,你可以给我说道说道吗?
也就是说我们遵循 TCP/IP 协议就可以互联了是吧!
那。。大佬能告诉我下 TCP 和 IP 的区别吗?
啊~那如果丢失怎么办?有什么办法吗?
哦,明白了,那刚刚你说的 UDP 又是?
哦,明白,就是TCP可靠,UDP传输效率高。
太好了!!
恩,感谢大佬,明白了。
1 Python 中的 TCP 编程
1.1 TCP客户端的编写
我们现在访问一些网页什么的,这些网页是在服务器端的,而我们访问的设备属于客户端。
比如我们现在通过浏览器访问这个地址:
http://www.meizitu.com/
那么会得到好多小姐姐的图片哈哈:
那么我们怎么通过 Python 来建立可靠的 TCP 连接,获取到这些图片呢?
import socket
# 创建一个socket对象
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 开始建立TCP连接
s.connect(("www.meizitu.com",80))
# 连接后,发送请求
s.send(b'GET / HTTP/1.1\r\nHost: www.meizitu.com\r\nConnection: close\r\n\r\n')
# 接收数据
buffer = []
while True:
d = s.recv(1024)
if d:
buffer.append(d)
else:
break
# 把字节连接起来
data = b''.join(buffer)
# 关闭连接
s.close()
# 把数据读取出来
with open('meizi.html','wb') as f:
f.write(data)
运行之后,我么就有了咱们的妹纸文件:
打开有惊喜。
嗯嗯嗯,我懂了,我这就去试试,小姐姐等我。
要啊,见笑见笑,我把纸巾收回去先。
1.2 TCP 服务端的编写
服务端一般都是一直在运行着的,等待着客户端来连接,然后给出请求响应,服务端需要提供 ip 地址和端口给客户端去连接。
首先我们来写一个简单服务端的:
# 创建socket对象
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 绑定监听端口
s.bind(('127.0.0.1',8888))
# 监听
s.listen(1)
while True:
# 接收连接
sock,addr = s.accept()
print("有人连进来了")
sock.send(b'hei man, are you ok?')
sock.close
当有人连接进来我们就给他发一句:hei man,are you ok ?
接着我们再来写个客户端的连接过去:
import socket
# 创建一个socket对象
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 开始建立TCP连接
s.connect(("127.0.0.1",8888))
# 接收数据
buffer = []
d = s.recv(1024)
buffer.append(d)
# 把字节连接起来
data = b''.join(buffer)
print(data)
# 关闭连接
s.close()
然后先运行我们的服务端,再运行客户端:
懂了懂了,谢谢大佬,给~
不好意思,我刚刚拿错了,对了,大佬,那我怎么使用Python来编写UDP协议的呢?
2 Python中的 UDP 编程
我们来先写服务端:
# 创建socket对象,这里传入的是SOCK_DGRAM,代表UDP
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 绑定监听端口
s.bind(('127.0.0.1',8090))
while True:
# 接收连接
data,addr = s.recvfrom(1024)
print(addr)
s.sendto(b'hei man, are you ok?',addr)
可以看到,在这里我们不需要跟对方连接,只要知道地址就直接发送过去就可以了。
客户端:
# 创建一个socket对象
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.sendto(b'ha',("127.0.0.1",8090))
# 接收数据
print(s.recv(1024).decode('utf-8'))
# 关闭连接
s.close()
运行如下:
感谢大佬,我去试一下
关注我,让你像看小黄文一样轻松学到 Python 的所有!
长按识别
点赞,转发到朋友圈是一种支持