在HTTP协议中,您可以使用keep-alive在一个套接字中发送许多请求,然后立即从服务器接收响应,这样可以显着加快整个过程.有没有办法在python请求lib中执行此操作?或者有没有其他方法可以使用请求lib加快速度?
我正在学习Python中的套接字并想出来
variable = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Run Code Online (Sandbox Code Playgroud)
我明白这个功能socket.socket和socket.AF_INET,但我很好奇socket.SOCK_STREAM.它的功能是什么?
我试图在python中使用socket.gethostbyaddr()来反转dns一个IP列表,它为某些值返回'Unknown Host',但是对同一个ip使用dig会返回Hostname.此外,挖掘似乎比使用python模块快得多,有什么具体原因吗?
import socket
# This returns 'Unknown Host'
name, alias, addresslist = socket.gethostbyaddr('114.143.51.197')
Run Code Online (Sandbox Code Playgroud) 从堆栈溢出的其他帖子来看,这应该是有效的
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("www.cnn.com" , 80))
s.sendall("GET / HTTP/1.1\r\n")
print s.recv(4096)
s.close
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,它只是挂起(at recv)并且从不打印.我知道对www.cnn.com的请求会将数据分块,但我至少应该从中读取一些内容recv,对吧?
PS我知道这是不是做到这一点的最好办法,而且有像库
httplib和urllib2在那里,但我不能使用那些为这个项目(这是学校).我必须使用该socket库
我有一个长期运行的python脚本,与upstart一起启动.这个脚本提出了很多请求.一切都运行良好,但几个小时后我开始永久性地为每个请求得到以下错误:
File "/opt/a/a-env/local/lib/python2.7/site-packages/atom/client.py", line 119, in request
File "/opt/a/a-env/local/lib/python2.7/site-packages/atom/http_core.py", line 420, in request
File "/opt/a/a-env/local/lib/python2.7/site-packages/atom/http_core.py", line 489, in _http_request
File "/usr/lib/python2.7/httplib.py", line 931, in endheaders
File "/usr/lib/python2.7/httplib.py", line 794, in _send_output
File "/usr/lib/python2.7/httplib.py", line 756, in send
File "/usr/lib/python2.7/httplib.py", line 1134, in connect
File "/usr/lib/python2.7/socket.py", line 553, in create_connection
gaierror: [Errno -3] Temporary failure in name resolution
Run Code Online (Sandbox Code Playgroud)
这不是名称解析或DNS的问题,因为简单的应用程序重新启动可以解决此问题.
我已经尝试了Python 2.6 a 2.7并且出现了同样的情况.
我在跑 Linux 2.6.35-30-virtual #61-Ubuntu SMP Tue Oct 11 18:26:36 UTC 2011 x86_64 GNU/Linux
有一些帖子有这个问题,但没有一个有简单的解释或解决方案:
我见过很多关于使用 JavaScript/Html5 在网络浏览器中使用原始 TCP/UDP 套接字的问题,但是它们都很旧,就像5 年前发布的那样。现在是 2021 年,我想知道是否有可能避免使用 WebSockets,而是使用原始 TCP/UDP 套接字,以便我的本地网页可以与本地 Python 套接字服务器通信。
我不介意它是否无法通过互联网访问,或者我是否需要扩展,因为它仅适用于家庭项目,其中我的 Raspberry Pi 零上的网页将与我的主计算机通信以通过其 Python 套接字服务器请求数据。
我知道 Chrome 应用程序在被删除之前有一个套接字 API,并且我看到了这篇关于 Chromium 开发人员想要添加套接字的文章,但未能找到任何有关它的真实信息。
有谁知道在浏览器中使用原始 TCP/UDP 套接字的方法吗?
如何使用 python 检查是否仍然存在来自特定 IP 地址的连接。
这是我的代码:
# Process connections
print('Listening on port', port)
while True:
c, addr = s.accept()
print("Got connection from", addr)
msg = "<html></html>"
response_headers = {
'Content-Type': 'text/html; encoding=utf8',
'Content-Length': len(msg.encode(encoding="utf-8")),
'Connection': 'close',
}
response_headers_raw = ''.join('%s: %s\n' % (k, v) for k, v in response_headers.items())
response_proto = 'HTTP/1.1'
response_status = '200'
response_status_text = 'OK' # this can be random
# sending all this stuff
r = '%s %s %s' % (response_proto, response_status, response_status_text)
c.send(r.encode(encoding="utf-8"))
c.send(response_headers_raw.encode(encoding="utf-8"))
c.send('\n'.encode(encoding="utf-8")) # to separate headers from …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用带有 TCP 协议的 asyncio 将图像从我的本地计算机发送到云中的计算机。有时我会发送整个图像,有时只发送图像的一部分。
客户代码
import os
os.environ['PYTHONASYNCIODEBUG'] = '1'
import asyncio
import logging
logging.basicConfig(level=logging.ERROR)
async def tcp_echo_client(data, loop):
reader, writer = await asyncio.open_connection(<ip_addr>, <port>,
loop=loop)
print('Sending data of size: %r' % str(len(data)))
writer.write(data)
await writer.drain()
#print("Message: %r" %(data))
print(type(data))
print('Close the socket')
writer.write_eof()
writer.close()
with open('sendpic0.jpg','rb') as f:
data=f.read()
loop = asyncio.get_event_loop()
loop.run_until_complete(tcp_echo_client(data, loop))
loop.close()
Run Code Online (Sandbox Code Playgroud)
服务器代码:
import os
os.environ['PYTHONASYNCIODEBUG'] = '1'
import asyncio
import logging
logging.basicConfig(level=logging.ERROR)
async def handle_echo(reader, writer):
data = await reader.read()
addr = writer.get_extra_info('peername')
#print("Received …Run Code Online (Sandbox Code Playgroud) 我在互联网上找到了一段代码,它表示它为我的机器提供了本地网络 IP 地址:
hostname = socket.gethostname()
local_ip = socket.gethostbyname(hostname)
Run Code Online (Sandbox Code Playgroud)
但它返回的IP是192.168.94.2,但我在WIFI网络中的IP地址实际上是192.168.1.107 我怎样才能只用python获取wifi网络本地IP地址?我希望它适用于 Windows、Linux 和 MacOS。
python-sockets ×10
python ×9
sockets ×4
http ×2
dig ×1
getaddrinfo ×1
httplib ×1
ip-address ×1
javascript ×1
localhost ×1
networking ×1
python-3.x ×1
raw-sockets ×1
tcp ×1
urllib ×1
websocket ×1