当前位置: 技术文章>> 100道python面试题之-如何使用Python的socket库创建TCP和UDP服务器与客户端?
文章标题:100道python面试题之-如何使用Python的socket库创建TCP和UDP服务器与客户端?
在Python中,使用`socket`库可以方便地创建TCP和UDP的服务器与客户端。下面分别介绍如何使用`socket`库来创建这两种类型的服务器和客户端。
### TCP 服务器
TCP服务器通常监听一个端口,等待客户端的连接请求,然后接收来自客户端的数据,处理这些数据,并可能发送响应给客户端。
```python
import socket
def tcp_server(host='127.0.0.1', port=12345):
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((host, port))
server_socket.listen(5) # 最大连接数
print(f"TCP服务器启动,监听{host}:{port}")
while True:
client_socket, addr = server_socket.accept()
print(f"接受来自{addr}的连接")
try:
while True:
data = client_socket.recv(1024)
if not data:
break
print(f"收到数据: {data.decode()}")
# 发送响应
client_socket.sendall(data)
finally:
client_socket.close()
if __name__ == '__main__':
tcp_server()
```
### TCP 客户端
TCP客户端连接到服务器,发送数据,并接收来自服务器的响应。
```python
import socket
def tcp_client(server_host='127.0.0.1', server_port=12345):
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((server_host, server_port))
try:
message = input("请输入要发送的消息: ")
client_socket.sendall(message.encode())
data = client_socket.recv(1024)
print(f"来自服务器的响应: {data.decode()}")
finally:
client_socket.close()
if __name__ == '__main__':
tcp_client()
```
### UDP 服务器
UDP服务器与TCP服务器的主要区别在于UDP是无连接的,并且不保证数据包的顺序和完整性。
```python
import socket
def udp_server(host='127.0.0.1', port=12345):
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind((host, port))
print(f"UDP服务器启动,监听{host}:{port}")
while True:
data, addr = server_socket.recvfrom(1024)
print(f"从{addr}接收数据: {data.decode()}")
# 发送响应
server_socket.sendto(data, addr)
if __name__ == '__main__':
udp_server()
```
### UDP 客户端
UDP客户端发送数据到服务器,并接收来自服务器的响应(如果服务器设计为发送响应)。
```python
import socket
def udp_client(server_host='127.0.0.1', server_port=12345):
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
message = input("请输入要发送的消息: ")
client_socket.sendto(message.encode(), (server_host, server_port))
data, server = client_socket.recvfrom(1024)
print(f"来自服务器的响应: {data.decode()}")
client_socket.close()
if __name__ == '__main__':
udp_client()
```
以上示例展示了如何使用Python的`socket`库来创建TCP和UDP的服务器与客户端。这些示例可以作为构建更复杂网络通信应用的基础。