连接时出现错误 - python

1 投票
3 回答
3310 浏览
提问于 2025-04-17 07:38

我正在学习关于套接字(sockets)的知识,但我无法连接到指定的IP和端口。以下是我写的脚本:

Stian的套接字测试工具

import socket

print "send request to website to check if sockets work right"
ip = raw_input("website ip: ")
port = raw_input("website port: ")
socket.connect(ip, port)
tosend = "this is a test"
currVal = 0
while currVal < 1:
    socket.send(tosend)
    print "1 sockets sent..."
    currrVal += 1
print "Done sending sockets. This hopefully worked"

这个Python代码有什么问题吗?它只适用于IPv4还是IPv6?还是说两者都可以用?

我遇到的错误:

C:\Users\Swipper\Documents\Python\sockets>sock.py
send request to website to check if sockets work right
website ip: 127.0.0.1
website port:
Traceback (most recent call last):
  File "C:\Users\Swipper\Documents\Python\sockets\sock.py", line 8, in <modu
le>
    socket.connect(ip, port)
AttributeError: 'module' object has no attribute 'connect'

希望有人能知道答案。

附注:我使用的是Python 2.7!

- Stian

3 个回答

0

难道连接时传入的参数不是一个元组吗?

socket.connect((ip, port))

还要检查一下send调用的返回值。

另外,只有在你接收到数据时,才能知道对方是否关闭了连接。接收数据是确认连接是否关闭的唯一可靠方法。

编辑:就像其他人说的,你需要创建一个套接字对象。

2

你首先需要创建一个套接字对象:

s = socket.socket()
s.connect((ip, int(port))

而不是:

socket.connect(ip, port)

然后使用 s.send 等等。

4

你现在是在对模块调用 .connect(),而不是对一个对象调用。你需要先创建一个套接字对象,通常是通过 socket.socket() 来实现的。然后,你可以在返回的那个对象上调用 .connect()

s = socket.socket()
s.connect((ip, int(port))

撰写回答