簡體   English   中英

如何解決此錯誤:OSError: [Errno 9] Bad file descriptor

[英]How do I troubleshoot this error: OSError: [Errno 9] Bad file descriptor

我試圖找出問題出在我的客戶端和服務器文件之間的位置。 客戶端接收由 TCP 服務器完成的正確計算。 但是,TCP 服務器在執行任務后繼續拋出錯誤。

添加服務器.py


# This is add_server.py script

import socket 

host = socket.gethostname()
port = 8096

s = socket.socket()
s.bind((host, port))
s.listen(5)

print('Waiting for connection...')
conn, addr = s.accept()

while True:
    data = conn.recv(1024)                          # Receive data in bytes
    print(data)
    decoded_data = data.decode('utf-8')                     # Decode data from bystes to string
    print(data)
    d = decoded_data.split(",")                             # Split the received string using ',' as separator and store in list 'd'
    add_data = int(d[0]) + int(d[1])                # add the content after converting to 'int'

    conn.sendall(str(add_data).encode('utf-8'))     # Stringify results and convert to bytes for transmission (String conversion is a must)
    conn.close()                        # Close connection

添加客戶端.py


# This add_client.py script

import socket

host = socket.gethostname()
port = 8096

s = socket.socket()
s.connect((host, port))

a = input('Enter first number: ')
b = input('Enter second number: ')
c = a + ', ' + b                                    # Generate string from numbers

print('Sending string {} to sever for processing...'.format(c))

s.sendall(c.encode('utf-8'))              # Converst string to bytes for transmission

data = s.recv(1024).decode('utf-8')       # Receive server response (addition results) and convert from bystes to string

print(data)                               # Convert 'string' data to 'int'

s.close()                                 # close connection

完整追溯

Traceback (most recent call last):
  File "/home/sharhan/AWS/AWS-PERSONAL-COURSES/linux-networking-and-troubleshooting/python-networking/add_server.py", line 17, in <module>
    data = conn.recv(1024)                          # Receive data in bytes
OSError: [Errno 9] Bad file descriptor

您正在關閉此行中while循環內的套接字

while True:
    data = conn.recv(1024) 
    # Rest of the code
    conn.close()  

因此,下次您嘗試使用conn.recv接收數據時,它會導致錯誤。

要解決此問題,只需在接收完所有數據后關閉連接即可。

while True:
    data = conn.recv(1024) 
    # Rest of the code
conn.close() 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM