【发布时间】:2019-01-17 19:39:39
【问题描述】:
自过去 3 天以来,我一直在尝试修复此错误,但我慢慢厌倦了它,请有人指出我正确的方向吗?
所以,我写了两个脚本,一个是服务器,另一个是客户端
服务器.py
>#!/usr/python
import socket
import os
port = 3000
def clear():
os.system('clear')
print("-:-:-:-:-:Server:-:-:-:-:-")
#Starting Server
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
host = socket.gethostname()
serversocket.bind((host, port))
serversocket.listen(1)
clear()
clientsocket, addr = serversocket.accept()
print("Connection from: " + str(addr))
while True:
msg = raw_input(" ->")
if msg == "help":
clear()
print("+-----------------------------------+")
print("| Help Menu |")
print("+-----------------------------------+")
print("| help - shows help menu |")
print("+-----------------------------------+")
print("| clear - clears |")
print("+-----------------------------------+")
raw_input("Press ANY key to return")
clear()
elif msg == "clear":
clear()
else:
msg = str(msg).encode("UTF-8")
clientsocket.send(msg)
msg = clientsocket.recv(4096)
print(msg.decode("UTF-8"))
和
客户端.py
>#!/usr/python
import socket
import time
def send(msg):
try:
s.send(msg.encode("UTF-8"))
except:
Connect()
def getInstructions():
try:
while True:
msg = s.recv(4096)
inst = msg.decode("UTF-8")
time.sleep(5)
send("!")
except:
Connect()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
def Connect():
try:
print("Connect() connecting to: "+ str(host) + str(3000))
s.connect((host, 3000))
getInstructions()
except:
time.sleep(1)
print("Connect() Exception")
Connect()
Connect()
简而言之,我的程序所做的是
服务器启动并等待传入流量
客户端启动并向服务器发送流量
客户端每 5 秒发送一个字符串(在这种情况下为“!”),如果服务器没有收到它,客户端正在尝试重新连接到服务器,这是问题所在,客户端没有重新连接,它卡在了Connect() 循环,因为它不能再重新连接了
我尝试在重新连接时始终创建一个新套接字
客户端.py
>s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
def Connect():
try:
print("Connect() connecting to: "+ str(host) + str(3000))
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, 3000))
getInstructions()
except:
time.sleep(1)
print("Connect() Exception")
Connect()
这似乎以某种方式解决了问题,客户端能够重新连接到服务器,但这一行确实更破坏了代码,客户端显示为由服务器连接,但客户端没有收到任何发送的数据。
还有一些好话,然后客户端连接到服务器,然后我停止服务器,客户端进入“重新连接模式”,然后我再次启动服务器,没有任何反应,客户端是仍在尝试重新连接(但失败)。现在我必须重新启动客户端才能重新连接,这并不是我真正想要的..
【问题讨论】:
标签: python sockets server client