网络编程 基础 基于socket的tcp和udp连接
网络开发的框架
-
C/S B/S 架构
- 程序都是bs架构的程序(b指浏览器,s指服务器)
- c(client)是客户端,s(server)是服务器
- bs架构是cs架构的一种
- 未来的趋势,
- pc端bs架构,统一了程序的入口
- 手机端 微信公众号,统一了程序的入口
-
socket
-
起一个tcp协议的socket进行通信
-
# tcp协议 #客户端 # import socket # rev = socket.socket() # # rev.bind(("ip地址",端口号)) #端口号一般取8000- 9999 # rev.listen() #开启服务端 # # msg,addr = rev.accept() #三次握手过程,显示连接服务端的用户端地址 # msg.send("你好".encode("utf-8")) #给用户端发消息,需要进行编码 # mv = msg.recv(1024) #接受用户端回的消息,限制一次接受的最大字节 # print(mv.decode("utf-8")) #打印接受到的消息,需要解码 # msg.close() #关闭用户端的连接 # rev.close() #关闭服务端
# 用户端 # import socket # cli = socket.socket() # cli.connect(("ip地址",端口号)) #连接服务端 # msg = cli.recv(1024) #接收信息 # print(msg.decode("utf-8")) #打印消息 # mv = input("》》》》》:") # cli.send(mv.encode("utf-8")) #发消息 # cli.close() #关闭用户端
利用端口传输视频
import socket rev = socket.socket() rev.bind(("127.0.0.1",8989)) rev.listen() conn,addr = rev.accept() filname = conn.recv(1024) with open(filname.decode("utf-8"),"wb") as f: while True: content = conn.recv(1024) if content == b"ok":break f.write(content) print("接收完毕") conn.close() rev.close() import time import os import socket cli = socket.socket() cli.connect(("127.0.0.1",8989)) cli.send("file".encode("utf-8")) time.sleep(0.1) size = os.path.getsize("file") with open("file","rb") as f: while size: content = f.read(1024) size -= len(content) cli.send(content) cli.send(b"ok") print("传输完毕") cli.close()
-
-
起一个udp协议的socket进行通信
-
# udp协议 # import socket # rev = socket.socket(type=socket.SOCK_DGRAM) # rev.bind(("ip地址",端口号)) # # msg,addr = rev.recvfrom(1024) #接收到的消息 # print(msg.decode("utf-8")) # rev.sendto("你好".encode("utf-8",addr)) #发消息,需要对方的ip地址 # rev.close() #关闭端口 # import socket # cli = socket.socket(type=socket.SOCK_DGRAM) # cli.sendto("信息".encode("utf-8"),("ip地址",端口号)) #发消息 # mv,addr = cli.recvfrom(1024) #接收信息和ip地址 # print(mv.decode("utf-8")) #打印信息 # cli.close() #关闭端口
-