首页 > 解决方案 > 运行客户端\服务器python时套接字断开连接

问题描述

我有一个客户端-服务器程序从服务器发送到客户端

服务器位于与客户端不同的文件夹中(例如服务器代码有一个文件夹,客户端代码有另一个文件夹)

- 运行服务器和客户端时,服务器给我一个错误,即套接字断开连接,我不知道为什么: Traceback(最近一次调用最后一次):文件“server.py”,第 30 行,在 s.send(ans .encode(FORMAT)) OSError: [WinError 10057] 不允许发送或接收数据的请求,因为套接字未连接并且(使用 sendto 调用在数据报套接字上发送时)没有提供地址

服务器代码:

import socket
import os
import json

SIZE = 1024
FORMAT = "utf-8"

# creating a TCP socket
print('\n','_'*50,"\n\nThe server started.. ")

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(("127.0.0.1", 5100))

# converted into passive socket - queue up to 2 requests
print("\n\nThe server is listening.. ")
s.listen(5)


while True:
    cli, sockname = s.accept()
    print('Accepted request from', sockname[0], 'with port number', sockname[1])

    listoffile= [x for x in os.listdir() if x.endswith(".txt")]
    ans =json.dumps(listoffile)
    thelist=ans.replace(',','\n').replace('[',"").replace('"',"").replace(']',"")+"\n exit"

    print('\n The server will send the list to the client:\n',thelist)
    s.sendall(ans.encode(FORMAT))
    rec = cli.recv(SIZE).encode(FORMAT)
    if rec != 'exit':
        with open(rec,'rb') as f:
            filetosend =f.read(SIZE)
            s.sendall(filetosend.encode(FORMAT))
    elif rec == 'exit':
        cli.close()
        s.close()

客户端代码:


import socket
host = '127.0.0.1'
port = 5100
SIZE = 1024
FORMAT = "utf-8"

# creating a TCP socket
print('\n','_'*50,"\n\nThe client side started.. ")

c = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
c.connect((host, port))

while True:
        
    msg = c.recv(SIZE).decode(FORMAT)
    msg=msg.replace(',','\n').replace('[',"").replace('"',"").replace(']',"")+"\n exit"
    print(f"Choose one of the file to get a copy: {msg}")
    filename = input("Enter the file name or exit to quit:")
    if filename != 'exit':
        c.send(filename.encode(FORMAT))
        f=open(filename,'wb')
        data=c.recv(SIZE)
        f.write(data)
        print('The file {filename} is copied.')
    elif filename == 'exit':
        c.close()

标签: pythonsocketsvisual-studio-codetcptxt

解决方案


推荐阅读