Python 套接字编程,其他程序无法连接到服务器
Python Socket Programming, other programs aren't connecting to the server
我多次打开同一个程序(准确地说是 10 次),我都试图首先解决随机数问题。当他们解决这个数字时,他们打开一个服务器,所有其他相同的程序都在等待连接的单独线程上监听,当他们最终连接时,我希望它们全部关闭。
import random
import os
import socket
import threading
import time
host = '192.168.1.139'
port = 8011
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def verified():
print('Connection made successfuly')
time.sleep(10)
quit()
def network():
try:
s.connect(('192.168.1.135',8014))
f = s.recv(50)
finished = f.decode('utf-8')
if finished == 'completed':
quit()
except:
pass
def winner():
x = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
x.bind(('192.168.1.135', 8014))
x.listen(10)
con, address = x.accept()
con.send(bytes('completed', 'utf-8'))
def mine():
global guess
time.sleep(.000001)
guess = random.randint(0,1000)
print(guess)
tran = 500
while True:
mine()
if guess == 500:
print("Solved")
winner()
break;
else:
x = threading.Thread(target=network)
x.start()
由于某种原因它正在连接到服务器但它没有退出程序,这可能是因为它正在连接到自身并快速退出?请帮忙,谢谢!
其实我是一头雾水,但是显然当quit()
在一个函数中时,它并不能结束整个过程,所以我建议你做的是用一个变量来做while循环该网络将能够改变(甚至使用 guess
):
guessing = True
while guessing:
mine()
if guess == 500:
print("Solved")
winner()
break;
else:
x = threading.Thread(target=network)
x.start()
并将网络更改为:
def network():
try:
s.connect(('192.168.1.135',8014))
f = s.recv(50)
finished = f.decode('utf-8')
if finished == 'completed':
#quit()
global guessing
guessing = False
except:
pass
我看到host
和port
这两个常量没有用到
不幸的是,获胜者功能只接受一个答案
(她有点内向)
但我们可以解决这个问题:
def winner():
x = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
x.bind(('192.168.1.135', 8014))
x.listen(10)
connected = 0
while connected < 10:
con, address = x.accept()
con.send(bytes('completed', 'utf-8'))
connected += 1
是的,她正在交朋友
好的,但现在她在外面的世界,她需要和很多人交谈
不只是限制 10,所以她去公共汽车站(她要回家),她等了一会儿,看看是否有人会和她说话(出于任何原因),有一段时间没有人说什么,所以,她把她airpods 并开始听一些好的 {在此处插入计算机功能喜欢听的音乐}
所以,要实现这个:
def winner():
x = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
x.settimeout(5) # WAITS FOR FIVE SECONDS
x.bind(('192.168.1.135', 8014))
x.listen()
while True:
try:
con, address = x.accept()
con.send(bytes('completed', 'utf-8'))
except socket.timeout: # IF IN FIVE SECONDS, RECEIVES NO CONNECTION
break
x.settimeout(5)
如果超过了设置的时间(在情况 5 中)而另一方没有任何响应,x.settimeout(5)
将使连接给出一个 socket.timeout 错误。
现在我记得使用线程我们可以将客户端推送到另一个函数和 "free" 客户端队列,但我认为对于这种特殊情况,这个解决方案更好
我多次打开同一个程序(准确地说是 10 次),我都试图首先解决随机数问题。当他们解决这个数字时,他们打开一个服务器,所有其他相同的程序都在等待连接的单独线程上监听,当他们最终连接时,我希望它们全部关闭。
import random
import os
import socket
import threading
import time
host = '192.168.1.139'
port = 8011
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def verified():
print('Connection made successfuly')
time.sleep(10)
quit()
def network():
try:
s.connect(('192.168.1.135',8014))
f = s.recv(50)
finished = f.decode('utf-8')
if finished == 'completed':
quit()
except:
pass
def winner():
x = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
x.bind(('192.168.1.135', 8014))
x.listen(10)
con, address = x.accept()
con.send(bytes('completed', 'utf-8'))
def mine():
global guess
time.sleep(.000001)
guess = random.randint(0,1000)
print(guess)
tran = 500
while True:
mine()
if guess == 500:
print("Solved")
winner()
break;
else:
x = threading.Thread(target=network)
x.start()
由于某种原因它正在连接到服务器但它没有退出程序,这可能是因为它正在连接到自身并快速退出?请帮忙,谢谢!
其实我是一头雾水,但是显然当quit()
在一个函数中时,它并不能结束整个过程,所以我建议你做的是用一个变量来做while循环该网络将能够改变(甚至使用 guess
):
guessing = True
while guessing:
mine()
if guess == 500:
print("Solved")
winner()
break;
else:
x = threading.Thread(target=network)
x.start()
并将网络更改为:
def network():
try:
s.connect(('192.168.1.135',8014))
f = s.recv(50)
finished = f.decode('utf-8')
if finished == 'completed':
#quit()
global guessing
guessing = False
except:
pass
我看到host
和port
这两个常量没有用到
不幸的是,获胜者功能只接受一个答案 (她有点内向) 但我们可以解决这个问题:
def winner():
x = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
x.bind(('192.168.1.135', 8014))
x.listen(10)
connected = 0
while connected < 10:
con, address = x.accept()
con.send(bytes('completed', 'utf-8'))
connected += 1
是的,她正在交朋友
好的,但现在她在外面的世界,她需要和很多人交谈 不只是限制 10,所以她去公共汽车站(她要回家),她等了一会儿,看看是否有人会和她说话(出于任何原因),有一段时间没有人说什么,所以,她把她airpods 并开始听一些好的 {在此处插入计算机功能喜欢听的音乐} 所以,要实现这个:
def winner():
x = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
x.settimeout(5) # WAITS FOR FIVE SECONDS
x.bind(('192.168.1.135', 8014))
x.listen()
while True:
try:
con, address = x.accept()
con.send(bytes('completed', 'utf-8'))
except socket.timeout: # IF IN FIVE SECONDS, RECEIVES NO CONNECTION
break
x.settimeout(5)
如果超过了设置的时间(在情况 5 中)而另一方没有任何响应,x.settimeout(5)
将使连接给出一个 socket.timeout 错误。
现在我记得使用线程我们可以将客户端推送到另一个函数和 "free" 客户端队列,但我认为对于这种特殊情况,这个解决方案更好