![eea41568d81e1beaf8c55e5e1962e2ba.png](https://i-blog.csdnimg.cn/blog_migrate/c4457c59912b3342e45e0b4940fb8e8d.jpeg)
类容
- TCP客户端
- TCP服务端
- TCP需要注意事项
- 实现文件下载器
TCP客户端构建流程
- 1.创建socket
- 2.链接服务器
- 3.接收数据
- 4.关闭套接字
import socket
#创建套接字
tcp_demo=socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)
#建立连接
tcp_demo.connect(("127.0.0.1",8080))
#发送数据
str1=input("请输入你要发送的内容:")
tcp_demo.send(str1.encode("gbk"))
#接收服务器发送过来的数据数据
str2=tcp_demo.recv(1024)
print(str2.decode("gbk"))
TCP服务端
- 1.socket创建套接字
- 2.bind绑定IP和port
- 3.listen使套接字变为可以被动链接
- 4.accept等待客户端的链接
- 5.recv/send接收发送数据
import socket
def deom():
#创建套接字
tcp_demo=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#绑定服务器端口和ip
tcp_demo.bind(("100.64.249.133",8080))
tcp_demo.listen(128)
#接受连接
new_tcp_demo,client_addr =tcp_demo.accept()
print(client_addr)
#发送数据
str1=input("请输入你要发送的数据:")
new_tcp_demo.send(str1.encode("gbk"))
#接收客服端发送的数据
str2=new_tcp_demo.recv(1024)
print(str2.decode("gbk"))
if __name__ == '__main__':
deom()
"""
实现TCP服务端为多个客户端服务
- 当一个客户端的服务结束之后就会自动断开,为等待的一个客户端服务
- 只能服务一次,无法多次为一个客户端服务
"""
TCP优化
import socket
def deom():
#创建套接字
tcp_demo=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#绑定服务器端口和ip
tcp_demo.bind(("100.64.249.133",8080))
#接受连接
while True:
tcp_demo.listen(128)
new_tcp_demo,client_addr =tcp_demo.accept()
print(client_addr)
#发送数据
while True:
str1=input("请输入你要发送的数据:")
new_tcp_demo.send(str1.encode("gbk"))
#接收客服端发送的数据
str2=new_tcp_demo.recv(1024)
if str2.decode("gbk"):
print(str2.decode("gbk"))
else:
break
new_tcp_demo.close()
tcp_demo.close()
if __name__ == '__main__':
deom()
#添加循环是程序循环运行
实现文件下载器
下载端
import socket
#创建接收端
tcp_demo=socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)
#绑定端口和ip
tcp_demo.bind(("100.64.249.133",8080))
tcp_demo.listen(128)
#创建连接
new_tcp_demo,client_addr=tcp_demo.accept()
print(client_addr)
#接收数据
str1=new_tcp_demo.recv(1024*1024)
file_name="demo.txt"
with open("附件" + file_name, "ab") as p:
p.write(str1)
发送端
import socket
udp_demo=socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)
udp_demo.connect(("100.64.249.133",8080))
#发送数据
with open('demo.txt','rb') as a:
udp_demo.send(a.read())
udp_demo.close()
![94b52a8efde6f1d60db7429ce604ffae.png](https://i-blog.csdnimg.cn/blog_migrate/4870b5900dfc155a76c310af2ccaf6ef.jpeg)