【问题标题】:Python: Only accept specific IP (socket)Python:只接受特定的 IP(套接字)
【发布时间】:2018-09-09 00:32:14
【问题描述】:

我有一个由 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 ')

然后套接字应该只接受具有用户在“connectip”中指定的 IP 的客户端。

请原谅我的英语不好

【问题讨论】:

    标签: python sockets connection


    【解决方案1】:

    您仍然必须接受它,但您可以在传输任何数据之前关闭它。

    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 很快就会被弃用。

    【讨论】:

    • @MireiKadia 没问题 :)
    • 只是为了澄清... shutdown 在这里是不必要的。 shutdown 所做的一切也由 close 完成。 (实际上,shutdown 根本不需要;它适用于非常特殊的情况,您希望表明您不会发送更多数据,或者您希望忽略更多接收到的数据,无需关闭插座。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 2011-12-23
    • 2023-03-19
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多