【问题标题】:Socket didn't make connection with server套接字没有与服务器建立连接
【发布时间】:2026-02-19 16:05:03
【问题描述】:

请在此代码中帮助我。错误如下。

错误:套接字成功创建 111 连接失败回溯最近调用最后一个文件 custom-iec.py 模块 s.sendstartdt 中的第 27 行 typeerror 发送参数 1 必须是字符串缓冲区列表

import socket 
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
a = socket.connect_ex(('XXX.XXX.XXX.XXX', 2500))
#s = socket.socket()
port=2500
a=socket.connect_ex(('XXX.XXX.XXX.XXX', port))
print a
Packet = [

    0x68,
    0x04, 
    0x43,
    0x00, 
    0x00, 
    0x00 
    ]
socket.send(Packet)
print s.recv(256)
s.close

【问题讨论】:

    标签: python sockets networking


    【解决方案1】:

    不要用您自己的套接字变量覆盖库函数套接字。这样做时您可能会遇到问题。

    socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ^^ - better is: s = socket...
    

    但我建议你看看@这个评论:

    import socket
    
    clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
    clientsocket.connect(('YOURIP', YOURPORT))   
    clientsocket.send('hello')
    

    来自https://*.com/a/18297623/8619512

    【讨论】:

    • 我使用的是 python 2.7.X 版本,在这个版本中我应该使用 coonect_ex() 函数。当我使用这个函数 connect() 时,它给了我一个错误。
    • 你在函数 send('hello') 中发送了一个唯一的字符串。我想,我正在发送一个包含一些值的变量。
    【解决方案2】:

    typeerror 发送参数 1 必须是字符串缓冲区列表

    错误信息的正确写法是:

    TypeError: send() argument 1 must be string or buffer, not list
    

    这就是说 - 使用Packet = […,您定义了一个列表,而send() 需要一个字符串 或一个缓冲区。您可以使用Packet = "\x68\x04\x43\x00\x00\x00" 将您的数据包定义为字符串。

    【讨论】:

    • 我如何将数据包定义为字符串。你能帮帮我吗??
    • @Praveen Soni - 我如何将数据包定义为字符串:我写的正是如何做到这一点。