一.socket-TCP网络通信
1.1什么是socket?
定义: 套接字 , 用来实现网络编程的一种数据传输方法
socket把一些复杂的tcp/ip协议进行封装 , 我们遵循socket规则进行编程
1.2TCP协议
TCP : 传输可靠信息的一种协议
用于保密性较高的,网络通信较完整的时候: 邮箱 , 网页
网络类型地址 :
ipv4--->AF_INET
ipv6--->AF_INET6
1.3如何实现发送信息的网络通讯
1.服务端
1.建立服务端的socket对象
2.绑定自己的ip (个人地址) 以及端口 (动态端口1025--65535)
3.建立监听模式 , 设置最大连接数
4.等待客户链接
5.接收客户数据 , 发送信息
6.关闭链接
# socket 是内置函数,不需要下载 import socket """ socket 是套接字类, 有两个参数 socket_family :网络地址类型: ipv4参数值 -》 AF_INET ipv6参数值 -》 AF_INET6 socket_type : 套接字 :TCP协议 =》 SOCK_STREAM UDP协议 => SOCK_DGRAM """ # 创建套接字对象 # 用ipv4,tcp协议的套接字 IPhone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定自己ip和端口号 # bind方法来实现,这里只有一个参数值,而且必须用元组传输 IPhone.bind( ("127.0.0.1", 10086) ) # 我们这里设置最大链接数 IPhone.listen(5) # 等待客户端链接 """ accept: 这个方法调用后会有两个返回值 1. 客户端对象(数据),我们以后要用这个对象进行接受和发送 2.客户端的ip和端口号 """ # conn:就是客户端对象 # adder 地址:ip和端口 conn, adder = IPhone.accept() while 1: # 接受和发送 # 接受数据:设定最大字节数,单位为b # 会有链接出错 try: data = conn.recv(1024) # 我们数据:在网路中数据是以数据流传输 # 我们需要编译为文档文字, decode是字符串的编译 print(data.decode("utf-8")) # 发送信息 data = input("》》》") conn.send(data.encode("utf-8")) except ConnectionResetError as massg: print(massg) break conn.close() IPhone.close()
2.客户端
1.建立客户端socket
2.链接服务器ip端口
3.接受发送信息
4.关闭
import socket # 建立客户端的对象 huxing = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定是服务端ip和端口 huxing.connect( ("127.0.0.1", 10086) ) while 1: data = input("》》》") huxing.send(data.encode("utf-8")) if data == "晚安": break if not data: continue # 这里设置数据接受的最大字节数 data = huxing.recv(1024) print(data.decode("utf-8")) huxing.close()
二.socket_UDP网络通信
2.1UDP协议
UDP: 传输不可靠信息的一种协议,容易丢包
多用于实时性较高的时候: 直播 , 语音
1.服务端
1.建立服务端的socket对象
2.绑定自己的ip(个人地址) 以及端口( 动态端口1025--65535)
3.接受传输信息
4关闭链接
# socket 是内置函数,不需要下载 import socket """ socket 是套接字类, 有两个参数 socket_family :网络地址类型: ipv4参数值 -》 AF_INET ipv6参数值 -》 AF_INET6 socket_type : 套接字 :TCP协议 =》 SOCK_STREAM UDP协议 => SOCK_DGRAM """ # 创建套接字对象 # 用ipv4,tcp协议的套接字 IPhone = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定自己ip和端口号 # bind方法来实现,这里只有一个参数值,而且必须用元组传输 IPhone.bind( ("127.0.0.1", 10086) ) # 等待客户端链接 while 1: # 接受和发送 # 接受数据:设定最大字节数,单位为b # 会有链接出错 try: """ UDP不需要额外建立链接,只需要发送成功就可以建立链接 recvfrom : 也要最大字节数 1.客户端数据包 2.客户端ip和端口 """ # 我们数据:在网路中数据是以数据流传输 # 我们需要编译为文档文字, decode是字符串的编译 data, adder = IPhone.recvfrom(1024) print(data.decode("utf-8")) # 发送信息 data = input("》》》") IPhone.sendto(data.encode("utf-8"), adder) except ConnectionResetError as massg: print(massg) break IPhone.close()
2.客户端
1.创建客户端socket对象
2.接受发送数据
3.关闭链接
import socket # 建立客户端的对象 huxing = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定是服务端ip和端口 ipPort = ("127.0.0.1", 10086) while 1: data = input("》》》") huxing.sendto(data.encode("utf-8"), ipPort) if data == "晚安": break if not data: continue # 这里设置数据接受的最大字节数 data, adder = huxing.recvfrom(1024) print(data.decode("utf-8")) huxing.close()