Python: принимать только определенные IP (сокет) - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть программа, состоящая из Java-клиента и Python-сервера. Сервер python может получать несколько подключений, и клиенты будут пытаться подключаться к серверу каждые 17 секунд. Мой вопрос: Сервер должен принимать только одно соединение с IP-адресом, введенным пользователем ранее.

HOST = '0.0.0.0'
PORT = 1979

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created!'

try:
        s.bind((HOST, PORT))
except socket.error as e:
    print(e)
        sys.exit()

print 'Socket bind complete'

s.settimeout(30)
s.listen(10)

print 'Listening...'

timeout = 8

timeout_start = time.time()

while time.time() < timeout_start + timeout:
    try:
            conn, addr = s.accept()
        msg = conn.recv(1024)
        print ('--------------------------------------')
        print (msg) 
    except socket.timeout as e:
        print(e,': No client out there :(')
        s.close()
        break

        print 'Client connected: ' + addr[0] + ':' + str(addr[1])
    print ('--------------------------------------')

s.close()   

Этот сокет принимает все входящие соединения. Я хочу добавить это перед сокетом:

connectip = raw_input('Please enter the IP of the client you want to connect to ')

и тогда сокет должен принимать клиента только с IP-адресом, указанным пользователем в «connectctip».

Прошу прощения за мой плохой английский

1 Ответ

0 голосов
/ 08 сентября 2018

Вам все равно придется принять его, но вы можете закрыть его, прежде чем передавать какие-либо данные.

connectip = raw_input("Please enter the IP of the client you want to connect to ")
conn, addr = s.accept()
if addr[0] != connectip:
    conn.shutdown(SHUT_RDWR)
    conn.close()
else:
    # do what ever you want here

Кстати, вы действительно должны перейти на python 3, так как python 2 очень скоро устареет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...