让服务器一直运行main.py,如何使socket服务器在不关闭自身的情况下永远运行(Python)...

我在做什么

服务器允许一个客户端检索没有问题的文件。但问题是,当客户端关闭程序时,服务器也会关闭自己,不让另一个客户端建立连接。我读了一些关于使用while循环使会话活跃的文章。有人知道我怎么做吗?

import socket, os, subprocess, shutil, pickle, struct

# Create a Socket ( connect two computers)

def create_socket():

try:

global host

global port

global s

host = ""

port = 9999

s = socket.socket()

except socket.error as msg:

create_socket()

# Binding the socket and listening for connections

def bind_socket():

try:

global host

global port

global s

s.bind((host, port))

s.listen(5)

except socket.error as msg:

bind_socket()

# send file list

def flist(conn):

try:

arr = pickle.dumps(os.listdir())

conn.send(arr)

except:

conn.send(('Error').encode("utf-8"))

# accept file from server

def fdown(filename, conn):

try:

data = conn.recv(1024).decode("utf-8")

if data[:6] == 'EXISTS':

filesize = data[6:]

conn.send("OK".encode("utf-8"))

f = open(filename, 'wb')

data = (conn.recv(1024))

totalRecv = len(data)

f.write(data)

while int(totalRecv) < int(filesize):

data = conn.recv(1024)

totalRecv += len(data)

f.write(data)

f.close()

except:

conn.send(('Error').encode("utf-8"))

# send file

def fup(filename, conn):

if os.path.isfile(filename):

conn.send(str.encode("EXISTS " + str(os.path.getsize(filename))))

filesize = int(os.path.getsize(filename))

userResponse = conn.recv(1024).decode("utf-8")

if userResponse[:2] == 'OK':

with open(filename, 'rb') as f:

bytesToSend = f.read(1024)

conn.send(bytesToSend)

totalSend = len(bytesToSend)

while int(totalSend) < int(filesize):

bytesToSend = f.read(1024)

totalSend += len(bytesToSend)

conn.send(bytesToSend)

else:

conn.send("ERROR".encode("utf-8"))

# main

def main(s):

while True:

data = (s.recv(1024)).decode("utf-8").split('~')

if data[0] == 'fdown':

fup(data[1], s)

elif data[0] == 'fup':

fdown(data[1], s)

elif data[0] == 'flist':

flist(s)

else:

s.send(".".encode('utf-8'))

# Establish connection with a client (socket must be listening)

def socket_accept():

conn, address = s.accept()

main(conn)

conn.close()

create_socket()

bind_socket()

socket_accept()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值