Socket.error [错误10060]

时间:2016-02-11 21:22:11

标签: python python-2.7 sockets

这是我试图运行的代码。但该程序产生一个socket.error。我有一个网络代理,端口8080连接到我的互联网,我还需要在这里添加更多细节来创建这个套接字连接?

import socket

mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('www.pythonlearn.com', 80))
mysock.send('GET http://www.pythonlearn.com/code/intro-short.txt HTTP/1.0\n\n')

while True:
    data = mysock.recv(512)
    if ( len(data) < 1 ) :
        break
    print data;

mysock.close()

2 个答案:

答案 0 :(得分:1)

如果我运行您的代码,我会从第5行收到错误TypeError: a bytes-like object is required, not 'str'

尝试使用:mysock.send(b'GET http://www.pythonlearn.com/code/intro-short.txt HTTP/1.0\n\n'),并在字符串前加b表示bytestring

答案 1 :(得分:1)

运行代码时出现类型错误,连接套接字时没有错误。使用套接字库时,请使用makefile方法,这样您就不必处理恼人的细节。

mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
my_sock_input = mysock.makefile('r')
my_sock_output = mysock.makefile('w')

现在my_sock_input可以使用像readline()这样的方法,而不需要保留或删除字节的任何细节。输出相同的便利,但写入。记得关闭所有这些!

关于你的问题,我尝试使用我的makefile变量编写类似的东西,但我还没有收到任何消息。所以还有其他一些问题。

现在,解决方案。下载网址并阅读其内容的更简单方法是使用urllib.request库。如果您使用的是Python 2.7,只需import urrlib

import urllib.request

data =  urllib.request.urlopen('http://www.pythonlearn.com/code/intro-short.txt')
readable = data.read()
print(readable)