Socket客户端与服务端

客户端

复制代码
'''
在使用Socket客户端时,还需要考虑以下几点最佳实践:
    1. 使用异常处理:Socket操作可能会抛出异常,例如连接错误或数据传输错误。因此,在使用Socket客户端时,应该使用适当的异常处理来捕获和处理这些异常。
    2. 关闭连接:在不再使用Socket连接时,应该及时关闭连接,以释放系统资源。
    3. 数据编码:在发送和接收数据时,需要将数据进行编码和解码,通常可以使用encode()和decode()方法将字符串转换为字节流和字节流转换为字符串。
    4. 错误处理:尽管Socket提供了可靠的网络通信,但仍然可能发生错误,例如连接超时或服务器无响应。在使用Socket客户端时,应该考虑这些错误情况,并采取相应的错误处理措施。
'''

import socket


def send_request(client_socket, request):
    client_socket.sendall(request.encode('utf-8'))
    response = client_socket.recv(1024).decode('utf-8')
    return response


def main():
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_address = ('localhost', 8080)
    client_socket.connect(server_address)

    try:
        while True:
            request = input('Enter a request (q to quit): ')
            if request == 'q':
                break
            response = send_request(client_socket, request)
            print('Response:', response)
    finally:
        client_socket.close()


if __name__ == '__main__':
    main()
复制代码

服务端

复制代码
 1 '''
 2 创建Socket服务端的最佳实践包括以下几个方面:
 3     1. 创建Socket对象:使用socket.socket()方法创建一个Socket对象,指定地址族(例如AF_INET表示IPv4)和套接字类型(例如SOCK_STREAM表示TCP)。
 4     2. 绑定地址和端口:使用bind()方法将Socket绑定到一个地址和端口,以便客户端可以连接到该地址和端口。
 5     3. 监听连接:使用listen()方法开始监听连接请求。可以指定最大连接数,当连接请求超过该数量时,新的连接会被拒绝。
 6     4. 接受连接:使用accept()方法接受客户端的连接请求,并返回一个新的Socket对象和客户端地址信息。
 7     5. 与客户端通信:通过新的Socket对象与客户端进行通信,发送和接收数据。
 8     6. 关闭连接:在不再使用连接时,使用close()方法关闭Socket连接。
 9 '''
10 
11 import socket  # 1. 导入内置模块socket
12 
13 # 2. 创建Socket对象,并指定地址族和套接字类型
14 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
15 
16 # 3. 绑定地址和端口
17 server_address = ('localhost', 8080)
18 server_socket.bind(server_address)
19 
20 # 4. 监听连接
21 server_socket.listen(5)
22 # 5. 处理连接并处理收发数据
23 while True:
24     print('Waiting for a client to connect...')
25 
26     # 5.1 接受连接
27     client_socket, client_address = server_socket.accept()
28     print('Connected to', client_address)
29 
30     try:
31         while True:
32             # 5.2 接收数据
33             data = client_socket.recv(1024)  # 会阻塞在此处,直到受到数据或客户端断开
34             if not data:
35                 break  # 客户端断开,会执行此句
36             print('Received:', data.decode('utf-8'))
37 
38             # 5.3 发送响应
39             response = 'Hello, client!'
40             client_socket.sendall(response.encode('utf-8'))
41     finally:
42         # 6. 关闭连接
43         client_socket.close()  # 客户端退出后,会自动执行此句
复制代码

上述代码创建了一个Socket服务端,通过bind()方法将其绑定到本地地址和8080端口。然后,使用listen()方法开始监听连接请求。

在一个无限循环中,使用accept()方法接受客户端的连接请求,并返回一个新的Socket对象和客户端地址信息。

然后,使用该Socket对象与客户端进行通信,接收客户端发送的数据,并发送响应。

 

当不再需要与客户端通信时(客户端主动断开或网络问题导致),关闭Socket连接。

需要注意的是,Socket服务端通常需要处理多个客户端的连接请求和数据传输。因此,在实际应用中,可以使用线程、进程或异步编程等方法来处理并发连接和数据传输,以提高性能和可扩展性。

posted @   Allen_Hao  阅读(89)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示