1. 导入必要的库
首先,需要导入Python的`socket`库,它提供了创建和管理socket连接的功能。
```python
import socket
```
2. 创建服务器端socket
使用`socket.socket()`函数创建一个服务器端的socket对象,指定协议族(如`socket.AF_INET`表示IPv4)和socket类型(如`socket.SOCK_STREAM`表示TCP协议)。
```python
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
```
3. 绑定地址和端口
将服务器socket绑定到一个特定的IP地址和端口号上,以便客户端可以连接到这个地址和端口。
```python
host = '0.0.0.0' # 监听所有可用的网络接口
port = 8000 # 选择一个未被占用的端口号
server_socket.bind((host, port))
```
4. 监听连接请求
调用`listen()`方法开始监听传入的连接请求,参数指定了等待连接队列的最大长度。
```python
server_socket.listen(5) # 允许最多5个客户端等待连接
```
5. 接受和处理连接
使用`accept()`方法接受客户端的连接请求,该方法会阻塞,直到有客户端连接为止。接受连接后,返回一个新的socket对象用于与客户端通信,以及客户端的地址信息。
```python
client_socket, client_address = server_socket.accept()
print(f"Connected by {client_address}")
```
6. 处理客户端请求
通过新创建的socket对象与客户端进行数据交互,可以使用`recv()`方法接收数据,`send()`方法发送数据。
```python
data = client_socket.recv(1024) # 接收最多1024字节的数据
print(f"Received: {data.decode()}")
response = "Hello, client!" # 准备发送的数据
client_socket.send(response.encode()) # 发送数据给客户端
```
7. 关闭连接
通信完成后,关闭客户端socket和服务器socket以释放资源。
```python
client_socket.close()
server_socket.close()
```
# 完整示例代码
```python
import socket
# 创建服务器socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#绑定地址和端口
host = '0.0.0.0'
port = 8000
server_socket.bind((host, port))
# 开始监听
server_socket.listen(5)
print(f"Server is listening on {host}:{port}")
# 接受和处理连接
while True:
client_socket, client_address = server_socket.accept()
print(f"Connected by {client_address}")
try:
data = client_socket.recv(1024)
print(f"Received: {data.decode()}")
response = "Hello, client!"
client_socket.send(response.encode())
finally:
client_socket.close() # 确保关闭连接
# 关闭服务器socket(通常在程序结束时)
server_socket.close()
```
注意事项
- 在实际应用中,服务器通常需要处理多个客户端的并发连接,可以使用多线程或多进程技术来实现。
- 为了提高服务器的稳定性和安全性,还需要考虑异常处理、数据验证、加密通信等方面的问题。
- 确保服务器绑定的端口没有被其他程序占用,并且防火墙设置允许该端口的通信。