基本的Python客户端套接字示例

70 投票
5 回答
223817 浏览
提问于 2025-04-17 04:12

我一直在努力理解套接字是怎么工作的,并且试图分析我在这个页面上找到的一些简单客户端套接字程序的示例代码。因为这是基本的示例代码,我以为它没有错误,但当我尝试编译时,出现了以下错误信息。

文件 "client.py",第 4 行, client_socket.connect(('localhost', 5000)) 文件 "", 第 1 行,在 connect 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 个回答

25

这里有一个非常简单的套接字程序。这是套接字程序中最简单的类型了。

对于客户端程序(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()

先运行服务器程序,然后再运行客户端程序。

142

这里是一个最简单的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,确保服务器准备好接收信息。
  • 然后客户端向服务器发送信息;
  • 服务器收到信息后,就会结束运行。
23

它正在尝试连接到运行它的电脑上的5000端口,但连接被拒绝了。你确定你有一个服务器在运行吗?

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

nc -l -k -p 5000

有些实现可能需要你省略 -p 这个选项。

撰写回答