我创建了一个TCP服务器并将超时设置为30s,但是我希望超时倒数实时显示在屏幕上,如果30过去了,则打印Client not connected
。
预期输出:
import socket
#import datetime
import time
def countdown(t):
while t:
mins, secs = divmod(t, 60)
timer = '{:02d}:{:02d}'.format(mins, secs)
print(timer, end="\r")
time.sleep(1)
t -= 1
t = 30
#countdown(t)
def SocketServer():
host = input ("Enter the server IP addresss:" )
port = 8888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.bind((host, port))
s.listen(2)
s.settimeout(t)
print(""" ***********************************************************
This Server will timeout if no client connect in 30 seconds
************************************************************""")
countdown(t)
conn, addr = s.accept()
print(addr, "connectiom is establish")
conn.send("Hello Client!".encode())
conn.close()
except socket.timeout:
print("client not connected!")
s.close()
SocketServer()
希望这对您有所帮助!我将发布代码以供客户端与此服务器连接!我写了几行话来指导你!
import socket
import threading
import time
class SocketServer():
def __init__(self):
self.t=30
self.adr=""
print(""" ***********************************************************
This Server will timeout if no client connect in 30 seconds
************************************************************""")
#let's create a new thread for out server
# in the main thread, we will print and count seconds....
self.thread=threading.Thread(target=self.thread)
self.thread.daemon=True
self.thread.start()
self.counter()
def thread(self):
HOST = '127.0.0.1' # The server's hostname or IP address
PORT = 8888 # The port used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print('Connected by', addr)
#we want to know if someone is connected
#by set self.adr with something that has len>0 we will informe the main thread that it needs to stop
self.adr="Connected"
conn.send("Hello Client!".encode())
s.close() #if you want to close, or leave it to further connections
def counter(self):
for x in range(self.t + 1):
time.sleep(1)#sleep function
if (len(self.adr)!=0): #every time we chech if sel.adr is different from 0
print("Connection is established")
print("Connected after 00:{:02d}".format(x))
break #stop
else:
print ('00:{:02d}'.format(x))
#host = raw_input("Enter the server IP addresss:")
SocketServer()
客户端代码!
import socket
HOST = '127.0.0.1' # The server's hostname or IP address
PORT = 8888 # The port used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b'Hello, world')
data = s.recv(1024)
print('Received', repr(data))
输出:
***********************************************************
This Server will timeout if no client connect in 30 seconds
************************************************************
00:00
00:01
00:02
00:03
Connected by ('127.0.0.1', 27191)
Connection is established
Connected after 00:04
客户端输出:
Received b'Hello Client!'