我正在尝试用python编写实现套接字的程序。每个客户端发送一个PDF文件,服务器接收该文件,标题更改为“file_(number).pdf”(例如:file_1.pdf)。出现的问题是只有客户端才能成功发送文件。当第二个客户端尝试发送文件时,程序崩溃。我在做什么错,我该如何解决我的代码以允许N个客户端(N 这是服务器代码:

import socket
import sys
s = socket.socket()
s.bind(("localhost",9999))
s.listen(10) # Accepts up to 10 incoming connections..
sc, address = s.accept()

print address
i=1
f = open('file_'+ str(i)+".pdf",'wb') # Open in binary
i=i+1
while (True):

    # We receive and write to the file.
    l = sc.recv(1024)
    while (l):
        f.write(l)
        l = sc.recv(1024)
f.close()

sc.close()
s.close()
这是客户端代码:
import socket
import sys

s = socket.socket()
s.connect(("localhost",9999))
f = open ("libroR.pdf", "rb")
l = f.read(1024)
while (l):
    s.send(l)
    l = f.read(1024)
s.close()
为了简化我的代码,我总是使用一本文件名为“libroR.pdf”的书,但是在完整的代码中,它是由GUI选择的。

最佳答案

您必须将所有从sc, address = s.accept()sc.close()的代码放入另一个循环,否则服务器仅在收到第一个文件后终止。它不会崩溃,脚本刚刚完成。

[编辑] 这是经过修改的代码:

import socket
import sys
s = socket.socket()
s.bind(("localhost",9999))
s.listen(10) # Accepts up to 10 connections.

while True:
    sc, address = s.accept()

    print address
    i=1
    f = open('file_'+ str(i)+".pdf",'wb') #open in binary
    i=i+1
    while (True):
    # receive data and write it to file
        l = sc.recv(1024)
        while (l):
                f.write(l)
                l = sc.recv(1024)
    f.close()


    sc.close()

s.close()

请注意,s.listen(10)的意思是“set maximum accept rate to 10 connections”,而不是“10个连接后停止”。

10-07 13:26
查看更多