socket套接字
socket(简称 套接字) ,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于socket 来完成通信的。
1.创建socket:
导入socket模块:import socket
创建socket对象:对象名 = socket.socket(AddressFamily, Type)
AddressFamily(地址簇):
Type(传输类型)参数:
2.socket对象方法:
UDP收发信息
UDP收发信息步骤
1.创建套接字
2.绑定端口(不绑定的话端口会一直变化)
3.发送/接收消息
4.关闭套接字
UDP聊天器
1.思路分析
1.功能:(1)发送消息 (2)接收消息 (3)退出系统
2.架构:(1)主入口:main() (2)发送消息:send_msg() (3)接收消息:recv_msg()
主入口:(1)创建套接字,绑定端口 (2)选择功能
发送消息:(1)用户手动输入信息 (2)将消息编码并发送
接收消息:(1)接收消息 (2)解码并显示
2.代码实现
# 导入模块import socketdef send_msg(udp_socket): # 发送消息方法ip_other = input("请输入目标IP地址:")# 不输入时默认为以下IPif not ip_other:ip_other = "192.168.113.86"print("默认地址:192.168.113.86")port_other = input("请输入目标端口:")# 不输入时默认为8080端口if not port_other:port_other = "8080"print("默认端口:8080")content1 = input("请输入发送内容:\n")# 发送消息udp_socket.sendto(content1.encode(), (ip_other, int(port_other)))def recv_msg(udp_socket): # 接收消息方法# 获取缓冲区信息,并拆包recv_data, ip_port = udp_socket.recvfrom(1024)# 消息解码recv_txt = recv_data.decode()print("【消息来了】:", ip_port, ":", recv_txt)def main():# 创建套接字# socket.AF_INET IPv4协议 socket.SOCK_DGRAM 用户数据报udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定端口udp_socket.bind(("", 8080))while True:print("-------------------")print("| 1.发送消息 |")print("| 2.接收消息 |")print("| 3.退出系统 |")print("-------------------")num = input("请输入菜单编号:")if num == '1':send_msg(udp_socket)elif num == '2':recv_msg(udp_socket)elif num == '3':print("退出系统")breakelse:print("输入错误,重新输入!")# 关闭套接字udp_socket.close()if __name__ == "__main__":main()
3.功能测试
发送消息:
接收消息:
退出系统:
TCP收发信息
TCP发送端(客户端)
发送步骤:
1.创建套接字
2.绑定端口
3.建立连接
4.发送信息
5.接收响应信息(可有可无)
6.关闭套接字
# 导入模块 socketimport socket# 创建套接字 TCP# socket.SOCK_STREAM TCP 流式报文tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定端口tcp_client_socket.bind(("", 8082))# 建立连接# connect(address) 用于建立连接,address 是一个元组,含有对方的ip和端口tcp_client_socket.connect(("192.168.113.86", 8080))# 发送/接收数据# send(数据的二进制) 用于tcp协议的数据的发送tcp_client_socket.send("你好".encode())# 接收数据# recv(1024) 接收数据, 每次接收的最大字节数,recv() 也会造成程序阻塞,当收到数据后,会自动解阻塞recv_data = tcp_client_socket.recv(1024)# 解码re_text = recv_data.decode("utf-8")print(re_text)# 5、关闭套接字(连接)tcp_client_socket.close()
TCP接收端(服务端)
接收步骤:
1.创建套接字
2.绑定端口
3.设置监听
4.接受连接
5.接收信息
6.发送应答信息(可有可无)
7.关闭套接字(服务器端一般不关闭)
# 导入模块import socket# 创建套接字tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定端口tcp_server_socket.bind(("", 8080))# 设置被动监听tcp_server_socket.listen(128)# 等待连接while True:client_socket, client_ip = tcp_server_socket.accept()print("[新客户端来了]:", client_ip)# 收发数据while True:recv1 = client_socket.recv(1024)if recv1:recv_txt = recv1.decode("utf-8")print("[新消息]:", client_ip, ":", recv_txt)client_socket.send("收到\n".encode())else:print("对方已下线")break# 关闭连接client_socket.close()
客户端发送后,服务端收到消息
服务端收到消息,给客户端响应
客户端断开连接后
如果觉得《Python网络编程——socket套接字实现UDP/TCP信息传输》对你有帮助,请点赞、收藏,并留下你的观点哦!