使用socket.socket实现网络通信的关键步骤
发布时间:2023-12-29 00:41:46
使用socket.socket实现网络通信的关键步骤主要包括创建套接字、绑定端口、监听连接、接受连接、发送和接收数据。
1. 创建套接字:
通过调用socket.socket()函数来创建套接字,需要指定套接字类型和协议族。常见的套接字类型包括SOCK_STREAM(流式套接字)和SOCK_DGRAM(数据报套接字)。
import socket # 创建套接字 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2. 绑定端口:
使用bind()函数绑定服务器的IP地址和端口号。
# 绑定IP地址和端口号
address = ('127.0.0.1', 8000)
server_socket.bind(address)
3. 监听连接:
使用listen()函数开始监听连接请求。参数backlog指定等待连接的最大数量。
# 监听连接请求 server_socket.listen(5)
4. 接受连接:
使用accept()函数接受客户端的连接请求,并获得连接对象和客户端的地址。
# 接受连接请求 client_socket, client_address = server_socket.accept()
5. 发送和接收数据:
使用send()和recv()函数实现数据的发送和接收。
# 从客户端接收数据
data = client_socket.recv(1024)
# 发送数据给客户端
client_socket.send('Hello, client!'.encode('utf-8'))
完整的服务器端代码如下:
import socket
# 创建套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口号
address = ('127.0.0.1', 8000)
server_socket.bind(address)
# 监听连接请求
server_socket.listen(5)
print('Waiting for connection...')
# 接受连接请求
client_socket, client_address = server_socket.accept()
print('Connected with', client_address)
while True:
# 从客户端接收数据
data = client_socket.recv(1024)
if not data:
break
print('Received:', data.decode('utf-8'))
# 发送数据给客户端
client_socket.send('Hello, client!'.encode('utf-8'))
# 关闭连接
client_socket.close()
server_socket.close()
完整的客户端代码如下:
import socket
# 创建套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 服务器地址
server_address = ('127.0.0.1', 8000)
client_socket.connect(server_address)
print('Connected to', server_address)
while True:
# 发送数据给服务器
message = input('Enter message: ')
client_socket.send(message.encode('utf-8'))
# 从服务器接收数据
data = client_socket.recv(1024)
print('Received:', data.decode('utf-8'))
if message == 'exit':
break
# 关闭连接
client_socket.close()
使用以上代码可以实现一个简单的TCP通信,服务器等待客户端连接,客户端发送消息给服务器并接收服务器的回复。注意需要在服务器端先运行服务器代码,再运行客户端代码。
