python - Python 套接字中的断管
问题描述
我编写了一个简单的应用程序,它从文本文件中读取每个单词并报告有关单词的各种统计信息。一个文件读取文件中的每个单词,并使用 Python 的套接字库将每个单词发送到服务器。这对于滞后和停止停止之前的前几个单词效果很好。当我杀死服务器和客户端时,我收到了客户端的管道损坏错误消息:
Traceback (most recent call last):
File "client.py", line 27, in <module>
read_file()
File "client.py", line 19, in read_file
s.sendall(message_byte)
BrokenPipeError: [Errno 32] Broken pipe
这是我的client.py的代码:
import socket
import time
host = socket.gethostname()
port = 12345 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
def read_file():
with open('../DataSet/ToTheLighthouse.txt','r') as file:
index = 0
for line in file:
for word in line.split():
word_lower = word.lower()
word_stripped = ''.join([i for i in word_lower if i.isalpha()])
index_str = str(index)
message_byte = word_stripped.encode('utf-8')
s.sendall(message_byte)
time.sleep(1)
data = s.recv(1024)
index+=1
print('Received', repr(data))
read_file()
s.close()
对于server.py:
import socket
vowel = "aeiou"
host = ''
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
print(f"Host:{host}\tPort:{port}")
s.listen(1)
conn, addr = s.accept()
print(f'Connected by{addr}')
while True:
try:
data = conn.recv(1024)
if not data:
print("broke")
break
is_boat = lambda string: "boat" in string
starts_with_vowel = lambda char: "char" in vowel
data = str(data)
data = data[1:]
data = ''.join([i for i in data if i.isalpha()])
print(data)
word_len = len(data)
print(f"Word Length:{word_len}\n")
print(f"Has Boat: {is_boat(data)}")
print(f"Vowel Start: {starts_with_vowel(data[0])}")
conn.sendall(b"Server Says:hi")
except socket.error:
print("Error Occured.")
break
conn.close()
我正在努力查看导致此问题的原因,如果有人可以提供任何指导,我将不胜感激。谢谢你。
解决方案
推荐阅读
- ios - UIImageView 不显示图像
- python-3.x - Django 频道错误“关闭时间太长并被杀死”。
- angular - 服务人员的firebase托管子域错误
- c# - 如何正确比较同一类的 2 个对象?
- exception - 构造函数抛出的异常
- javascript - 如何将张量流模型导出为 JSON?
- javascript - javascript 计算器中的操作数无法按预期工作
- mongodb - 如何在两个索引之间抓取数据
- c - 为什么第 3 行给出错误:使用大小为 8 的未初始化值?
- c++ - 使用 GCC 卸载 OpenMP 失败,并显示“Ptx 程序集因错误而中止”