建立连接在python socket编程后如何获得客户端的IP地址?

问题描述 投票:0回答:2

我写了一个套接字程序发送一个文件,接收来自在我指定的客户端套接字的字符串(写客户端的IP地址)我要动态地获取客户端的地址,我试过.getpeername()函数,但得到的错误

我试图.getpeername()函数,但得到的错误

#host = '10.66.227.181'   # fixed ip of one client only
client_socket = socket.socket()
host = client_socket.getpeername()
print(clientip)
port = 8000
print(host,port)
client_socket.connect(host,port)

clientip = socket.gethostname(client_socket.getpeername())OSERROR:[10057 WinError]至发送或接收数据的请求,但不允许的,因为在插座没有被连接和供给,地址(使用sendto调用发送数据报套接字时)

python python-3.x sockets serversocket peer
2个回答
2
投票

如果一个UDP套接字未连接有没有同行。因此,不可能有一个对等名称。如果它连接,你已经知道你是如何连接。

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(host,port)
host, port = client_socket.getpeername()

1
投票

下面是从约UDP套接字(包括服务器和客户端)“的Python网络编程基础”书中的例子,我觉得这个例子将是对您有用:

import argparse, socket
from datetime import datetime

MAX_BYTES = 65535

def server(port):
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.bind(('127.0.0.1', port))
    print('Listening at {}'.format(sock.getsockname()))
    while True:
        data, address = sock.recvfrom(MAX_BYTES)
        text = data.decode('ascii')
        print('The client at {} says {!r}'.format(address, text))
        text = 'Your data was {} bytes long'.format(len(data))
        data = text.encode('ascii')
        sock.sendto(data, address)

def client(port):
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    text = 'The time is {}'.format(datetime.now())
    data = text.encode('ascii')
    sock.sendto(data, ('127.0.0.1', port))
    print('The OS assigned me the address {}'.format(sock.getsockname()))
    data, address = sock.recvfrom(MAX_BYTES)  # Danger! See Chapter 2
    text = data.decode('ascii')
    print('The server {} replied {!r}'.format(address, text))

if __name__ == '__main__':
    choices = {'client': client, 'server': server}
    parser = argparse.ArgumentParser(description='Send and receive UDP locally')
    parser.add_argument('role', choices=choices, help='which role to play')
    parser.add_argument('-p', metavar='PORT', type=int, default=1060,
                        help='UDP port (default 1060)')
    args = parser.parse_args()
    function = choices[args.role]
    function(args.p)

source

© www.soinside.com 2019 - 2024. All rights reserved.