首页 文章

基本Python客户端套接字示例

提问于
浏览
59

我已经试图挑选一些我在this page找到的示例代码,用于一个非常简单的客户端套接字程序 . 由于这是基本的示例代码,我认为它没有错误,但是当我尝试编译它时,我收到以下错误消息 .

文件“client.py”,第4行,在client_socket.connect中(('localhost',5000))文件“”,第1行,在连接socket.error中:[Errno 111]连接被拒绝

我已经搜索了这个错误的每个部分,并且有类似问题的人似乎已经通过更改端口号,使用'connect'而不是'bind'和其他一些东西得到了帮助,但没有一个他们适用于我的情况 . 非常感谢任何帮助,因为我对网络编程非常新,而且对python来说还是新手 .

顺便说一句,这是代码,以防链接因任何原因无效 .

#client example
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 5000))
while 1:
    data = client_socket.recv(512)
    if ( data == 'q' or data == 'Q'):
        client_socket.close()
        break;
    else:
        print "RECIEVED:" , data
        data = raw_input ( "SEND( TYPE q or Q to Quit):" )
        if (data <> 'Q' and data <> 'q'):
            client_socket.send(data)
        else:
            client_socket.send(data)
            client_socket.close()
            break;

5 回答

  • 120

    它试图连接到它在端口5000上运行的计算机,但连接被拒绝 . 您确定要运行服务器吗?

    如果没有,您可以使用netcat进行测试:

    nc -l -k -p 5000
    

    某些实现可能要求您省略 -p 标志 .

  • 21

    这是最简单的python套接字示例 .

    服务器端:

    import socket
    
    serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    serversocket.bind(('localhost', 8089))
    serversocket.listen(5) # become a server socket, maximum 5 connections
    
    while True:
        connection, address = serversocket.accept()
        buf = connection.recv(64)
        if len(buf) > 0:
            print buf
            break
    

    客户端:

    import socket
    
    clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    clientsocket.connect(('localhost', 8089))
    clientsocket.send('hello')
    
    • 首先运行SocketServer.py,并确保服务器已准备好侦听/接收某事

    • 然后客户端将信息发送到服务器;

    • 服务器收到后,它终止

  • 4

    这是一个非常简单的套接字程序 . 这和套接字一样简单 .

    用于客户端程序(CPU 1)

    import socket
    
    s = socket.socket()
    host = '111.111.0.11' # needs to be in quote
    port = 1247
    s.connect((host, port))
    print s.recv(1024)
    inpt = raw_input('type anything and click enter... ')
    s.send(inpt)
    print "the message has been sent"
    

    您必须将第4行中的111.111.0.11替换为第二个计算机网络设置中的IP号 .

    对于服务器程序(CPU 2)

    import socket
    
    s = socket.socket()
    host = socket.gethostname()
    port = 1247
    s.bind((host,port))
    s.listen(5)
    while True:
        c, addr = s.accept()
        print("Connection accepted from " + repr(addr[1]))
    
        c.send("Server approved connection\n")
        print repr(addr[1]) + ": " + c.recv(1026)
        c.close()
    

    运行服务器程序,然后运行客户端程序 .

  • 22

    看起来您的客户端正在尝试连接到不存在的服务器 . 在shell窗口中,运行:

    $ nc -l 5000
    

    在运行Python代码之前 . 它将充当服务器侦听端口5000以供您连接 . 然后你可以在Python窗口中输入并看到它出现在另一个终端中,反之亦然 .

  • 3

    您可能会混淆执行中的编译 . Python没有编译步骤! :)一旦你键入 python myprogram.py 程序运行,在你的情况下,尝试连接到一个开放的端口5000,如果没有服务器程序正在那里听到错误 . 听起来你熟悉两步语言,需要编译才能产生可执行文件 - 因此你会发现有人在混淆Python的情况下发现任何人在端口5000上进行监听!“编译时错误 . 但是,事实上,你的Python代码很好;你只需要在运行之前调出一个监听器!

相关问题