Join the 80,000 other DTN customers who enjoy the fastest, most reliable data available. There is no better value than DTN!

(Move your cursor to this area to pause scrolling)




"The people at Nirvana have very nice things to say about your company and I can see why! Price and service is a potent combination." - Comment from Ed
"I used to have *******, but they are way more money for the same thing. I have had no probs with data from DTN since switching over." - Comment from Public Forum Post
"You are either overstaffed or people just don't have problems with your feed because customer support always answers the phone quickly." - Comment from Jay via Email
"For anyone considering using DTN.IQ for a data feed, my experience with the quality of data and the tech support has been very positive." - Comment from Public Forum
"The service is great, I see a noticeable improvement in my volume profiles over [broker]'s data feed" - Comment from Larry
"I have to tell you though that using the IQFeed API is about the easiest and cleanest I have seen for some time." - Comment from Jim
"Just a thank you for the very helpful and prompt assistance and services. You provided me with noticeably superior service in my setup compared to a couple of other options I had looked at." - Comment from John
"You are much better than lawyers or the phone company because you answer the phone when I call! I just love your customer service." - Comment from Isreal
"Excellent datafeed !!!" - Comment from Arely
"I've never had DTN go out on me since switching. ******* would go down a couple times every month when I was using them." - Comment from Bryce in AL.
Home  Search  Register  Login  Recent Posts

Information on DTN's Industries:
DTN Oil & Gas | DTN Trading | DTN Agriculture | DTN Weather
Follow DTNMarkets on Twitter
DTN.IQ/IQFeed on Twitter
DTN News and Analysis on Twitter
»Forums Index »Archive (2017 and earlier) »IQFeed Developer Support »Erlang - Getting started with sockets - newbie quick hack
Author Topic: Erlang - Getting started with sockets - newbie quick hack (2 messages, Page 1 of 1)

klarsen
-Interested User-
Posts: 3
Joined: Jun 15, 2006


Posted: Jun 23, 2010 12:58 AM          Msg. 1 of 2
Hi Guys,

i'm trying to learn erlang :-) since it seems like Erlang loves small messages like quotes - and loves IP/Sockets. But i'm a TOTAL newbie into erlang - and took me a while to get feed up and get data out.

So I thought I would share - and would love if anyone else in the same boat would share too.

So here is a short code that 1. starts IQFeed, 2. Connects to Socket, 3 Retrieves a packet or two from port 5009 and outputs them to the console.

:code!!
%%%file_comment
-module(iqfeed_start).


-export([start/0,client/1]).

start() ->
open_port({spawn,"IQConnect.exe -product IQFEED_DEMO -version 1.0.0.0"}, []),
timer:sleep(1000). %open IQfeed and then wait for login etc


client(PortNo) ->
start(), %calls the start of IQConnect - remove this
{ok,Sock} = gen_tcp:connect("localhost", PortNo,[binary, {active,false}]), %open a socket connection
io:format("Connected to sock:~p ~n",[Sock]),
%%%gen_tcp:send(Sock,Message),
{ok,A}=gen_tcp:recv(Sock, 0), %receive what is waiting for us like "S,KEY etc"
io:format("~p ~n", [A]), % print it to console
gen_tcp:send(Sock,"wMSFT\r\n"), %ask for a Microsoft quote
io:format("command sent~n"),
Bx = gen_tcp:recv(Sock,0), %receive packet
io:format("~p ~n", [Bx]),
io:format("waiting for next server packet~n"),
C = gen_tcp:recv(Sock,0), %get next packet - if market not active this will show the 1 minute timer
io:format("~p ~n", [C]), % print it.
gen_tcp:close(Sock). %actually closes IQFeed - make it a comment for tests!


you start it by compiling the iqfeed_start.erl "c(iqfeed_start) from Erlang console. Then you can call it by writing "iqfeed_start:client(5009)." [enter] - where 5009 is the port number.

My todo list: Find a way to detect if IQFeed is already running (like fire a socket connect request)
Edited by klarsen on Jun 23, 2010 at 01:00 AM

JoshSN
-Interested User-
Posts: 29
Joined: Apr 8, 2010


Posted: Jun 25, 2010 07:42 AM          Msg. 2 of 2
Here's how it can be done in Perl.

#!/usr/bin/perl

use POE qw(Component::Client::TCPMulti);

system("/path/to/IQFeed/iqconnect.exe -product DEMO -version 1.1 &");
sleep 15;

my ($level1,$feed);

POE::Component::Client::TCPMulti->new(
InputEvent => sub {
print "From server: $_[ARG0]\n";
},
SuccessEvent => sub {
if ($_[ARG2] == 5009) {
$level1 = $_[ARG4];
$_[KERNEL]->yield(send => $level1, "wGOOG\r\n");
} elsif ($_[ARG2] == 9100) {
$feed = $_[ARG4];
$_[KERNEL]->yield(send => $feed, "HTD,MO1018U19,3\r\n");
}
},
inline_states => {
_start => sub {
$_[KERNEL]->yield(connect => '127.0.0.1', $_) for (5009, 9100);
},
}
);
 

 

Time: Sat May 18, 2024 4:35 AM CFBB v1.2.0 12 ms.
© AderSoftware 2002-2003