一、网络编程三要素
网络编程三要素包含:IP地址、端口号、协议。
1.IP地址
这是网络环境下每一台计算机的唯一标识,通过IP地址来找到指定的计算机。
查看IP地址:Linux 和 mac OS 使用 ifconfig 这个命令;Windows 使用 ipconfig 这个命令。
检查网络:ping www.baidu.com 检查是否能上公网 ;ping 当前局域网的ip地址 检查是否在
同一个局域网内 ;ping 127.0.0.1 检查本地网卡是否正常。
2.端口号
端口是数据传输的通道,每一个端口都有对应的端口号,通过端口号就能找到对应的端口,
通过端口来找到指定的进程。
3.协议
定义通信规则,符合协议则可以通信,否则无法正常通信。
TCP协议简称传输控制协议,是面向连接的,可靠的,基于字节流的传输层协议,必须先建
立连接(3次握手),再传输数据(4次挥手);
TCP通信需要经过创建连接、数据传送、终止连接三个步骤
udp协议则是无连接,不可靠的传输层协议。
二、socket套接字
它是进程中间通信的一个工具,只要网络中需要通信,就要基于socket进行数据传输。使用
socket套接字时要导入socket模块。
import socket
# 2.创建一个IPV4/TCP套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 3.最后记得关闭套接字
s.close()
三、编码和解码
在网络中,数据是以二进制数据类型bytes的形式进行传递的,所以我们在传输和使用的过程
中,需要使用到编码 encode() 和解码 decode()对数据进行类型处理转换。(编码格式通常设置为
utf-8)。
print('你好'.encode('utf8'))
print('------------------------------')
# 二进制转换字符串
print(b'\xe4\xbd\xa0\xe5\xa5\xbd')
print(b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode('utf8'))
四、基于TCP协议开发程序
1.客户端步骤流程
①创建客户端对象 ②客户端对象主动连接服务器 ③客户端对象发送消息给服务器
④客户端接收服务器返回的消息 ⑤客户端对象关闭
# 1.导包
import socket
# 2.创建客户端套接字对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 3.客户端套接字对象连接服务器
client_socket.connect(('127.0.0.1', 8081))
# 4.客户端套接字对象发送数据给服务器
client_socket.send('你好,服务器'.encode('utf-8'))
# 5.客户端套接字对象接收服务器发送的数据
data = client_socket.recv(1024)
print('接收到服务器发来的消息为:',data.decode('utf-8'))
# 6.关闭客户客户端套接字对象
client_socket.close()
2.服务器端步骤流程
①创建服务端套接字对象 ②绑定地址以及端口号 ③设置监听 ④等待接受客户端的连接请求
⑤从新的连接接受客户端消息 ⑥使用新的连接对象给客户端发消息
⑦先关闭新的连接对象,在关闭原始的服务器对象
# 1.导包
import socket
# 2.创建服务器套接字对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('未接通的服务器对象:', server_socket)
# 3.服务器套接字对象绑定地址和端口 TODO 地址和端口要封装成元组,且地址可以简写为''
server_socket.bind(('127.0.0.1', 8080))
# 4.服务器套接字对象设置监听数(最大连接数)
server_socket.listen(128)
# 5.服务器套接字对象等待客户端连接 TODO 直到客户端连接为止,然后直接拆包接收新的服务器对象和客户端信息
new_server_socket, client_addr = server_socket.accept()
print('已接通的服务器对象:', new_server_socket)
print('获取到客户端信息为:', client_addr)
# 6.服务器套接字对象接收客户端连接
data = new_server_socket.recv(1024)
print('接收到客户发来的消息为:', data.decode('utf-8'))
# 7.服务器套接字对象接收客户端发送的数据
new_server_socket.send('你好,客户端'.encode('utf-8'))
# 8.关闭服务器套接字对象
new_server_socket.close()
server_socket.close()
五、基于udp协议开发程序
①协议点对点发送消息(以飞秋软件为例)
import socket
# AF_INET: ipv4地址 SOCK_DGRAM:UDP协议
udp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# TODO 设置广播
udp_client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
# 飞秋服务器地址和端口号
server = ('192.168.34.12', 2425)
# 消息内容
content = '1:1234567:张三:学生:32:你好,帅哥!'
#[0] 消息类型:'1'
#[1] 发送者ID:'1234567'
#[2] 发送者昵称:'张三'
#[3] 群组或组织名称:'学生'
#[4] 接收者ID:'32'
#[5] 消息正文:'你好,帅哥!'
# sendto():发送消息 注意:编码是gbk
udp_client_socket.sendto(content.encode('gbk'), server)
②协议广播发送消息(以飞秋软件为例)
import socket
# AF_INET: ipv4地址 SOCK_DGRAM:UDP协议
udp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# TODO 设置广播
udp_client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
# 飞秋服务器地址和端口号
server = ('192.168.34.12', 2425)
# 消息内容
content = '1:1234567:张三:学生:32:你好,帅哥!'
# sendto():发送消息 注意:编码是gbk
udp_client_socket.sendto(content.encode('gbk'), server)