最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何將服務(wù)器上的python代碼通過QQ發(fā)送回傳信息(附實(shí)現(xiàn)方法)

 更新時(shí)間:2020年05月12日 09:49:40   作者:yihua_Leo  
這篇文章主要介紹了我將服務(wù)器上的python代碼通過QQ發(fā)送回傳信息(附實(shí)現(xiàn)方法),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

本文介紹我使用QQ得到服務(wù)器上回傳的python代碼的探索歷程,面向的對象是對計(jì)算機(jī)網(wǎng)絡(luò)有一定了解的讀者。期待有興趣的人和我一起探討!

需求來源

最近,我在跑一些數(shù)據(jù)量巨大的代碼。代碼在本地一運(yùn)行,CPU就占滿了,代碼運(yùn)行時(shí)間又久,因此這段時(shí)間根本用不了電腦,這對疫情在家的大學(xué)生很難受。把代碼放服務(wù)器吧,又不知道什么時(shí)候能跑完,這讓我很不爽。于是,我希望服務(wù)器端的代碼能給我一個(gè)不錯(cuò)的反饋,由此我選擇了QQ交互方法。

硬件工具

本地電腦一臺,服務(wù)器一臺(如果你只是想嘗試一下,而沒有服務(wù)器,可以使用 VMware 虛擬機(jī))

探索歷程

首先,我使用的無界面CentOS服務(wù)器上是沒有辦法運(yùn)行QQ的,因此想要實(shí)現(xiàn)交互,應(yīng)該先把服務(wù)器上的信息傳送到本地電腦,再由本地電腦發(fā)送給QQ,這樣我就可以收到消息了。

那么就將目標(biāo)分割為兩個(gè)任務(wù)了,分別為:

  • 本地電腦給QQ發(fā)信息
  • 服務(wù)器與本地電腦信息交互

接下來就給大家說明我是怎么實(shí)現(xiàn)這兩步的:

本地電腦給QQ發(fā)信息

主要原理:通過 win32 API, 將python信息賦給剪切板,粘貼到QQ聊天框中,最后模擬按 “Enter” 鍵,發(fā)送消息1。
代碼如下:

import win32gui
import win32con
import win32clipboard as w


class SendMsg:
 """

 這是一個(gè)用于將信息發(fā)送到QQ的類, 使用方法為 :
 SendMsg("收信人QQ昵稱", "信息").sendmsg()
 注意一點(diǎn),收信人的QQ聊天窗口要在屏幕上,不能最小化或被掩蓋。

 """

 def __init__(self, receiver, msg):
 self.receiver = receiver
 self.msg = msg
 self.set_text()

 # 設(shè)置剪貼版內(nèi)容
 def set_text(self):
 w.OpenClipboard()
 w.EmptyClipboard()
 w.SetClipboardData(win32con.CF_UNICODETEXT, self.msg)
 w.CloseClipboard()

 # 發(fā)送消息
 def sendmsg(self):
 qq = win32gui.FindWindow(None, self.receiver)
 win32gui.SendMessage(qq, win32con.WM_PASTE, 0, 0)
 win32gui.SendMessage(qq, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)


if __name__ == '__main__':
 SendMsg("一花一世界", "Hello, world").sendmsg()

效果如圖所示:

在這里插入圖片描述

注意:

1、python 關(guān)于 win32 的包,下載方式為:

pip install pypiwin32

2、QQ有兩種發(fā)送消息的模式,一種是"Enter",一種是"Ctrl+Enter"。這里要選擇"Enter"模式。

服務(wù)器與本地電腦信息交互

我們已經(jīng)完成了本地電腦給QQ發(fā)信息的操作,現(xiàn)在只需要完成服務(wù)器與本地電腦信息的交互,就可以讓本地電腦根據(jù)服務(wù)器的指令發(fā)送QQ信息了。
如何讓服務(wù)器和本地電腦通信呢?經(jīng)過一些思考,我選擇用Socket2。使用Socket的話,就要解決IP問題,因?yàn)楸镜仉娔X的IP不是公網(wǎng)IP,我們需要解決端口映射問題,將本地電腦的IP映射到公網(wǎng)!
考慮到不一定有路由器,我使用了一款軟件路由俠,該軟件在免費(fèi)的狀態(tài)下,一個(gè)月可以有一個(gè)G的流量進(jìn)行端口映射,因?yàn)槲覀冎饕糜谛《挝淖謧鬏?,這點(diǎn)流量已經(jīng)足夠。該軟件也操作簡單,我不過多介紹。
本地電腦開放的端口為8080端口,經(jīng)過路由俠的端口映射后,端口變?yōu)閥ihuahuahua.e2.luyouxia.net:30985
因?yàn)槲覀冎挥米鰡蜗蛲ㄐ?,所以服?wù)器的IP不重要。
我們首先測試一下Socket功能,讓服務(wù)器給本地電腦發(fā)一個(gè)"Hello world"
代碼如下:

本地電腦端代碼

from socket import *

HOST = ''
PORT = 8080
BUFSIZ = 1024
ADDR = (HOST, PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)

while True:
 print('waiting for connection...')
 tcpCliSock, addr = tcpSerSock.accept()
 print('...connnecting from:', addr)

 while True:
 data = tcpCliSock.recv(BUFSIZ)
 if not data:
 break
 print(data.decode('utf-8'))
 tcpCliSock.close()
tcpSerSock.close()

服務(wù)器端代碼

from socket import *

HOST = 'yihuahuahua.e2.luyouxia.net'
PORT = 30985
BUFSIZ = 1024
ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)

output_str = "Hello world!"
tcpCliSock.send(output_str.encode())
tcpCliSock.close()

注意:在進(jìn)行Socket通信時(shí),要注意開放端口!?。?/p>

將功能綜合

這里規(guī)定一個(gè)任務(wù):計(jì)算1加1的值,并返回計(jì)算時(shí)間,將上述功能綜合后,代碼如下:
本地電腦端代碼

from socket import *
import win32gui
import win32con
import win32clipboard as w


class SendMsg:
 """

 這是一個(gè)用于將信息發(fā)送到QQ的類, 使用方法為 :
 SendMsg("收信人QQ昵稱", "信息").sendmsg()
 注意一點(diǎn),收信人的QQ聊天窗口要在屏幕上,不能最小化或被掩蓋。

 """

 def __init__(self, receiver, msg):
 self.receiver = receiver
 self.msg = msg
 self.set_text()

 # 設(shè)置剪貼版內(nèi)容
 def set_text(self):
 w.OpenClipboard()
 w.EmptyClipboard()
 w.SetClipboardData(win32con.CF_UNICODETEXT, self.msg)
 w.CloseClipboard()

 # 發(fā)送消息
 def sendmsg(self):
 qq = win32gui.FindWindow(None, self.receiver)
 win32gui.SendMessage(qq, win32con.WM_PASTE, 0, 0)
 win32gui.SendMessage(qq, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)


if __name__ == '__main__':
 HOST = ''
 PORT = 8080
 BUFSIZ = 1024
 ADDR = (HOST, PORT)

 tcpSerSock = socket(AF_INET, SOCK_STREAM)
 tcpSerSock.bind(ADDR)
 tcpSerSock.listen(5)

 while True:
 tcpCliSock, addr = tcpSerSock.accept()

 while True:
 data = tcpCliSock.recv(BUFSIZ)
 if not data:
 break
 output_str = data.decode('utf-8')
 SendMsg("一花一世界", output_str).sendmsg()
 tcpCliSock.close()
 tcpSerSock.close()

服務(wù)器端代碼

from socket import *
import time
HOST = 'yihuahuahua.e2.luyouxia.net'
PORT = 30985
BUFSIZ =1024
ADDR = (HOST,PORT)

tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)
start = time.time()
count = 1 + 1
end = time.time()
output_str = "結(jié)果為" + str(count) + " 消耗時(shí)間" + str(int(end - start)) + "秒"
tcpCliSock.send(output_str.encode())
tcpCliSock.close()

運(yùn)行結(jié)果:

在這里插入圖片描述

美滋滋。

改進(jìn)方向與探索

目前已知的缺陷有:Socket第一次通信有概率收不到消息,第二次就好了…希望有大佬在評論區(qū)指出我的不足。

這個(gè)版本只能實(shí)現(xiàn)單方面信息傳送,如果想實(shí)現(xiàn)雙向的,我思考的一個(gè)思路是通過 酷QAir的QQ機(jī)器人 加上 CQHTTP3 插件配合nonebot庫4來實(shí)現(xiàn)。不過我的需求已經(jīng)實(shí)現(xiàn)了,暫時(shí)懶得動手了,有緣再探索吧。

https://www.cnblogs.com/hwj2019/p/11552055.html ↩︎

https://blog.csdn.net/su_bao/article/details/80380465 ↩︎

https://github.com/richardchien/coolq-http-api ↩︎

https://nonebot.cqp.moe/guide/getting-started.html ↩︎

 總結(jié)

到此這篇關(guān)于我將服務(wù)器上的python代碼通過QQ發(fā)送回傳信息(附實(shí)現(xiàn)方法)的文章就介紹到這了,更多相關(guān)python qq發(fā)送回傳信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Elasticsearches通過坐標(biāo)位置實(shí)現(xiàn)對附近人的搜索

    Elasticsearches通過坐標(biāo)位置實(shí)現(xiàn)對附近人的搜索

    這篇文章主要為大家介紹了Elasticsearches使用坐標(biāo)位置實(shí)現(xiàn)對附近人的搜索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • 詳解MD5算法的原理以及C#和JS的實(shí)現(xiàn)

    詳解MD5算法的原理以及C#和JS的實(shí)現(xiàn)

    MD5?是哈希算法(散列算法)的一種應(yīng)用。這篇文章主要和大家介紹一下MD5算法的原理以及C#和JS的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),需要的可以參考一下
    2023-03-03
  • 做一個(gè)優(yōu)秀程序員應(yīng)該知道的15件事

    做一個(gè)優(yōu)秀程序員應(yīng)該知道的15件事

    這篇文章主要介紹了做一個(gè)優(yōu)秀程序員應(yīng)該知道的15件事,寫的很好,需要的朋友可以參考下
    2014-07-07
  • Hive?判斷某個(gè)字段長度的示例代碼

    Hive?判斷某個(gè)字段長度的示例代碼

    hive是基于Hadoop的一個(gè)數(shù)據(jù)倉庫工具,用來進(jìn)行數(shù)據(jù)提取、轉(zhuǎn)化、加載,這是一種可以存儲、查詢和分析存儲在Hadoop中的大規(guī)模數(shù)據(jù)的機(jī)制,這篇文章主要介紹了Hive?判斷某個(gè)字段長度,需要的朋友可以參考下
    2024-08-08
  • delphi使用Chilkat 組件和庫從SFTP下載文件的方法

    delphi使用Chilkat 組件和庫從SFTP下載文件的方法

    這篇文章主要介紹了delphi使用Chilkat 組件和庫從SFTP下載文件的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Archlinux?Timeshift系統(tǒng)備份與還原的操作方法

    Archlinux?Timeshift系統(tǒng)備份與還原的操作方法

    這篇文章主要介紹了Archlinux?Timeshift系統(tǒng)備份與還原的操作方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • DataGrip 2020.1 安裝與激活方法

    DataGrip 2020.1 安裝與激活方法

    DataGrip是一款數(shù)據(jù)庫管理客戶端工具,方便連接到數(shù)據(jù)庫服務(wù)器,執(zhí)行sql、創(chuàng)建表、創(chuàng)建索引以及導(dǎo)出數(shù)據(jù)等。這篇文章主要介紹了DataGrip 2020.1 安裝與激活教程,需要的朋友可以參考下
    2020-09-09
  • 火車頭采集正文多圖片如何采集下載(只下載一張圖片的情況該如何處理)

    火車頭采集正文多圖片如何采集下載(只下載一張圖片的情況該如何處理)

    文章采集是站長常常會遇到的事,很多人使用火車頭采集器軟件,采集正文中有多個(gè)圖片的時(shí)候如果設(shè)置錯(cuò)誤,會遇到只下載一張圖片、采集后的正文多張圖片同一個(gè)文件名的情況
    2023-03-03
  • 有關(guān)微信的小程序和小游戲的區(qū)別

    有關(guān)微信的小程序和小游戲的區(qū)別

    這篇文章主要介紹了有關(guān)微信的小程序和小游戲的區(qū)別,本文通過圖文文字相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 使用git命令上傳代碼

    使用git命令上傳代碼

    這篇文章介紹了使用git命令上傳代碼的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03

最新評論

玉田县| 政和县| 通榆县| 顺平县| 杂多县| 南投市| 墨玉县| 兴义市| 万荣县| 马关县| 喀喇沁旗| 论坛| 丰台区| 达拉特旗| 塔河县| 彰武县| 弥勒县| 凤冈县| 大英县| 石门县| 保康县| 镇雄县| 乌苏市| 五莲县| 班戈县| 民丰县| 内江市| 饶阳县| 蛟河市| 剑阁县| 正镶白旗| 嵊州市| 唐山市| 腾冲县| 陵川县| 汉源县| 固镇县| 丰台区| 新化县| 乌拉特前旗| 囊谦县|