如何解决用socket实现通讯,即使服务器与客户端链接得到客户端信息却仍报错的问题?

15a1c0939d4b4beab591d805e50f953a.png

 ea57e95c919f4bb4afdd4939ef7dc147.png

以上分别是服务器和客户端的代码展示,方便后续大家对运行结果的了解

8c6ca82dde9c4c8f8652ad64ae8ab535.png 

可以发现当服务器与客户端连接时,客户端的信息已经被服务器接收到了,但仍然报错。

此时 可以调用shutdownOutput(),关闭输出流,使服务器端口得到-1值,从而关闭流。目的是告知服务器信息已经输出完毕。再次运行 ,可以发现不在报错且“已接收”输出了。

调用shutdownOutput()的缺点:流一旦关闭就不能开启。此方法并不是唯一方法,欢迎小伙伴们在评论区讨论最优方案🤗。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我并不是一个可以运行代码的程序。但是,我可以提供一些指导: 首先,你需要使用 Python 的 `socket` 模块创建一个 HTTP 服务器,以便浏览器客户端可以将邮件发送到该服务器。 然后,你需要解析 HTTP 请求,提取邮件内容,并将其转发到实际的接收邮件服务器的用户邮箱。你可以使用 Python 的 `smtplib` 模块来发送邮件。 以下是一个简单的代码示例: ```python import socket import smtplib # 创建 HTTP 服务器 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', 8000)) server_socket.listen(1) while True: # 接受客户端连接 client_socket, client_address = server_socket.accept() # 接收请求数据 request_data = client_socket.recv(1024).decode('utf-8') # 解析请求头 request_lines = request_data.split('\r\n') method, path, version = request_lines[0].split() # 提取邮件内容 if method == 'POST': content_length = int([line.split(':')[1].strip() for line in request_lines if line.startswith('Content-Length')][0]) mail_content = request_data.split('\r\n\r\n')[1][:content_length] # 发送邮件 smtp_server = smtplib.SMTP('smtp.example.com', 587) smtp_server.starttls() smtp_server.login('username', 'password') smtp_server.sendmail('sender@example.com', ['recipient@example.com'], mail_content) smtp_server.quit() # 返回响应 response_data = 'HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n' client_socket.sendall(response_data.encode('utf-8')) client_socket.close() ``` 需要注意的是,该示例代码仅供参考,你需要根据实际情况进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值