900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Python网络编程——socket套接字实现UDP/TCP信息传输

Python网络编程——socket套接字实现UDP/TCP信息传输

时间:2021-04-30 17:49:31

相关推荐

Python网络编程——socket套接字实现UDP/TCP信息传输

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()

客户端发送后,服务端收到消息

服务端收到消息,给客户端响应

客户端断开连接后

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。