【问题标题】:How to keep code running on client when server is offline服务器离线时如何保持代码在客户端上运行
【发布时间】:2020-03-31 17:07:28
【问题描述】:

所以我有一个服务器和客户端程序,两个程序在其中相互通信。 我的问题是当服务器断开/离线时,客户端程序立即停止运行。 我怎样才能做到这一点,以便客户端程序在服务器关闭后继续运行并每 20 秒尝试连接一次让我们说,当服务器重新联机时,它会重新连接。编辑:我忘了提到我知道如何重新连接主要问题是让代码继续运行而不是在套接字断开连接时停止。我也知道整个代码都有效。如果我关闭服务器程序的终端,那么客户端程序也会停止。

要重新连接的部分客户端代码:

import socket
import os
import sys
import subprocess
import time
from time import sleep

s = socket.socket()
host = '192.168.2.16'
port = 9999

connected = False

while connected == False:
    try:
        s.connect((host,port))
        connected = True
    except socket.error:
        sleep(5)

部分服务器代码:

import socket
import sys
import os
import threading
import time
from queue import Queue

NUMBER_OF_THREADS = 2
JOB_NUMBER = [1,2]
queue = Queue()
all_connections = []
all_adresses = []

def socket_create():
    try:
        global s
        global host
        global port
        host = '0.0.0.0'
        port = 9999
        s = socket.socket()
    except socket.error as msg:
        print("Error: " + str(msg))

def socket_bind():
    try:
        global host
        global s
        global port
        print("Binding Socket To Port " + str(port))
        s.bind((host, port))
        s.listen(5)
    except socket.error as msg:
        print("Socket Binding Error: " + str(msg) + '/n' + "Trying Again...")
        socket_bind()

def accept_connections():
    for c in all_connections:
        c.close()
    del all_connections[:]
    del all_adresses[:]
    while 1:
        try:
            conn, address = s.accept()
            conn.setblocking(1)
            all_connections.append(conn)
            all_adresses.append(address)
            print("\nConnection has been established: " + address[0])
        except:
            print("Error accepting connections")

和错误:

ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host

【问题讨论】:

  • 客户端可以使用timeout值在20秒内无法得到响应时引发错误,然后代码可能会捕获错误并尝试再次运行或跳过一段时间。跨度>
  • @furas 问题是如果服务器套接字关闭,客户端程序会立即停止
  • 您当前的代码是什么?您如何连接服务器和客户端以及如何断开服务器与客户端的连接?
  • 如果我只是关闭服务器程序的终端。客户端程序停止。我应该发出命令退出终端吗?
  • 您是否在控制台/终端中运行客户端来查看错误消息?也许它在套接字关闭时显示错误并且它无法运行关闭窗口。

标签: python python-3.x networking server client


【解决方案1】:

我找到了简单的答案。

使用 try 和 except。就这么简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2019-01-24
    • 2016-04-22
    相关资源
    最近更新 更多