- Python : 3.8.11
- OS : Ubuntu Kylin 20.04
- Conda : 4.10.1
- Pycharm : 2021.1.3
代码示例
udp_server
- 想过把udp_server改成多线程的模式,但是在查阅资料时见到有的同学说没有太大的必要。
"""
@Author : 行初心
@Date : 10/12/21 8:03 PM
"""
import socket
bind_ip = "127.0.0.1"
bind_port = 8888
# socket.AF_INET: 网络类型,IPv4
# socket.SOCK_DGRAM: UDP 客户端
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# SOL_SOCKET:正在使用的socket
# socket.SO_REUSEADDR,1 : 意义和功能较多,用于重启socket_server时依然可以顺利bind
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind((bind_ip, bind_port))
while True:
data = server.recvfrom(1024)
print(data)
server.sendto("get it!".encode("utf-8"), data[1])
# This code is unreachable
server.close()
udp_client
"""
@Author : 行初心
@Date : 10/12/21 8:03 PM
"""
import socket
server_ip = "127.0.0.1"
server_port = 8888
# socket.AF_INET: 网络类型,IPv4
# socket.SOCK_DGRAM: UDP 客户端
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client.sendto("hello world".encode("utf-8"), (server_ip, server_port))
response, address = client.recvfrom(1024)
print("response", response)
print("address", address)
# 要有释放资源的意识
client.close()
运行效果
udp_server
- 使用IDE强行结束的udp_server,所以会出现KeyboardInterrupt
/home/coder/anaconda3/envs/py38/bin/python /home/coder/PycharmProjects/pythonProject1/udp_server.py
(b'hello world', ('127.0.0.1', 42457))
Traceback (most recent call last):
File "/home/coder/PycharmProjects/pythonProject1/udp_server.py", line 22, in <module>
data = server.recvfrom(1024)
KeyboardInterrupt
Process finished with exit code 130 (interrupted by signal 2: SIGINT)
udp_client
/home/coder/anaconda3/envs/py38/bin/python /home/coder/PycharmProjects/pythonProject1/udp_client.py
response b'get it!'
address ('127.0.0.1', 8888)
Process finished with exit code 0
学习推荐
- Python文档 - English
- Python文档 - 中文
- Python规范 PEP
- Python规范 google版
- Python 源码
- Python PEP
- 优麒麟
- 掘金平台
- gitee平台
Python具有开源、跨平台、解释型、交互式等特性,值得学习。
Python的设计哲学:优雅,明确,简单。提倡用一种方法,最好是只有一种方法来做一件事。
代码的书写要遵守规范,这样有助于沟通和理解。
每种语言都有独特的思想,初学者需要转变思维、踏实践行、坚持积累。