欢迎访问宙启技术站
智能推送

使用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通信,服务器等待客户端连接,客户端发送消息给服务器并接收服务器的回复。注意需要在服务器端先运行服务器代码,再运行客户端代码。