2012-04-26 3 views
0

Сценарий, который я написал, написан на другом языке, незнакомом большинству людей [MQL4], но я импортировал функции python в код, чтобы я мог выполнить код python внутри сценарий. Моя проблема в том, что я подключаюсь к серверу с MQL4, и я хочу отправлять данные через его поток с помощью python. До сих пор я могу получить python только для создания своего собственного соединения. Есть ли способ подключиться к уже открытому сокету Windows?Python Winsock - Как отправить данные через уже активное соединение winsock

MQL КОД

void ircconnect(){ 
int struct_sockaddr[4]; 
int addr, port_low, port_high; 
int opts[1]; 
int c; 

if (irc_disabled == 1) return(0); 

// fill the sockaddr struct 
addr = inet_addr(server_addr); 
port_low = server_port & 0x00ff; 
port_high = (server_port & 0xff00) >> 8; 
struct_sockaddr[0] = AF_INET | (port_high << 16) | (port_low << 24); 
struct_sockaddr[1] = addr; 
struct_sockaddr[2] = 0; 
struct_sockaddr[3] = 0; 

// connect 
s = socket(AF_INET, SOCK_STREAM, 0); 

opts[0] = 1000; // send timeout milliseconds 
setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, opts, 4); 

c = connect(s, struct_sockaddr, 16); 

питон КОД

//Initialize Python Dll 
PyInit(); 
PyExecute("from Tkinter import *"); 
PyExecute("root = Tk()"); 

//Import necessary modules 
PyExecute("import socket, os"); 

//Connect 
PyExecute("network = \"irc.ircnetwork.com\""); 
PyExecute("port = 6667"); 
PyExecute("irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)"); 
PyExecute("irc.connect((network, port))"); 

//Identify 
PyExecute("irc.recv(1024)"); 
PyExecute("irc.send(\\"NICK Nick\\r\\n\")"); 
PyExecute("irc.send(\\"USER Nick Nick Nick :Nick IRC\\r\\n\")"); 
PyExecute("irc.send(\\"JOIN #channel\\r\\n\")"); 
PyExecute("irc.send(\"PRIVMSG NickServ IDENTIFY <pass>\\r\\n\")"); 
PyExecute("VERSION = \"version>\\r\\n\""); 

//Listen for PING 
PyExecute("while True:"); 
PyExecute("data = irc.recv(1024)"); 
PyExecute("print data"); 
PyExecute("if data.find(\"PING\") != -1:"); 

//Send PONG 
PyExecute("irc.send(\"PONG \" + data.split() [ 1 ] + \"\\r\\n\")"); 
PyExecute("elif data.find(\"VERSION\") !=-1:"); 
PyExecute("irc.send(VERSION + \"\\r\\n\")"); 
PyExecute("elif data.find(\"NOTICE\") !=-1:"); 
PyExecute("nick = data.split(\"\!\") [ 0 ].replace (\":\", \"\")"); 
PyExecute("message = \":\".join(data.split (\":\") [ 2: ])"); 
+0

возможно интерес: HTTP: //msdn.microsoft.com/en-us/library/windows/desktop/ms740522%28v=vs.85%29.aspx – mensi

+0

Спасибо. Я проверю это. :) – user1337878

+0

FYI, строки Python также могут использовать одинарные кавычки, исключая необходимость избежать двойных кавычек в коде. –

ответ

0

Да.

Это возможно и рекомендуется.

Чем ваш MQL код может "говорить" в какой бы то ни контрагентом - будь то Python, java, C#/C++, PHP ..., Erlang ... контрагентом.

Не рискуйте проблемы и проблемы с сырым O/гнездами S, а использовать способ более высокую абстракцию, как ZeroMQ, что имеют MQL4ZMQ привязок портирована и опубликованную Остен Конрад,

Смежные вопросы