Socket客户端与服务端
1.网络编程之IP地址&子网掩码2.端口&端口号3.Socket(套接字)4.socket模块中socket类5.socket加密传输6.socket加密传输&mysql应用7.Socket客户端实现
8.Socket客户端与服务端
9.TCP(Transmission Control Protocol)传输控制协议10.网络传输数据的编解码11.TCP客户端开发12.socket之send和recv原理剖析13.多任务版TCP服务端程序开发14.UDP15.http协议之网址16.http协议之简介17.http协议之请求报文18.http协议之响应报文19.搭建Python⾃带静态Web服务器20.自研静态Web服务器并返回固定⻚⾯数据21.静态web服务器-根据请求返回指定页面数据22.静态Web服务器-多任务版23.静态Web服务器-以⾯向对象的模式开发24.静态Web服务器-命令⾏启动并动态绑定端⼝号客户端
''' 在使用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服务端通常需要处理多个客户端的连接请求和数据传输。因此,在实际应用中,可以使用线程、进程或异步编程等方法来处理并发连接和数据传输,以提高性能和可扩展性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了