埋め込まれた Python ソース コードのこの部分は機能します。
//Native Source Code [C - Like Language]
string zncauth = nick + ":" + password;
//Initializes Python for executing [Python Source Code]
PyInit();
//Python Source Code
PyExecute("import socket");
// Create Connetion
PyExecute("server_addr = '127.0.0.1'");
PyExecute("server_port = 6667");
PyExecute("s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)");
PyExecute("s.connect((server_addr, server_port))");
PyExecute("s.send( \'NICK botnick\\r\\n\')");
PyExecute("s.send( \'USER znc bot znc :znc\\r\\n\')");
PyExecute("s.send( \'PASS " + zncauth + " \\r\\n\')");
これが問題です。9 分後にタイムアウトし、サーバーから切断されます。私の推測では、while statement
実行は 1 回です。
// Ping Pong
PyExecute("while True:\'\\n\'");
PyExecute("data = s.recv(4096)");
PyExecute("if data.find( \"PING\" ) != -1:\'\\n\'");
PyExecute("s.send ( \'PONG \' + data.split() [ 1 ] + \'\\r\\n\' )");
PyExecute("if data.find ( \'You need to send your password. Try /quote PASS <username>:<password>\' ) != -1:\'\\n\'");
PyExecute("s.send (\'PASS " + zncauth + " \\r\\n\')");
これは、私が試した while ループの問題の最新バージョンです。実行すると、このバージョンと上記のバージョンの while ループに顕著な違いはありません。
PyExecute("data = s.recv(4096)");
PyExecute("while data != 0:\'\\n\'");
PyExecute("if data.find( \"PING\" ) != -1:\'\\n\'");
PyExecute("if data == 0:\'\\n\'");
PyExecute("break");
これは、上記と同じ python コードの実行可能ファイルです。それは何時間も irc ネットワークにとどまりますが、作成された接続を介してメッセージを送信する必要があります。この実行可能ファイルを介してメッセージを送信し、メッセージを処理する方法を見つけるかwhile statement
、ネイティブ コードで機能するように適切に埋め込む必要があります。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
//Test.py
import socket
zncauth = 'nick:password'
server_addr = '127.0.0.1'
server_port = 6667
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((server_addr, server_port))
s.send( 'NICK botnick\r\n')
s.send( 'USER znc bot znc :znc\r\n')
s.send( 'PASS ' + zncauth + ' \r\n')
while True:
data = s.recv(4096)
if data.find ( 'PING' ) != -1:
s.send ( 'PONG ' + data.split() [ 1 ] + '\r\n' )
if data.find ( 'You need to send your password. Try /quote PASS <username>:<password>' ) != -1:
s.send ('PASS ' + zncauth + ' \r\n')