SSブログ
C# TcpClient ブログトップ

C# TcpClientを使用してサーバーへ接続してみよう② [C# TcpClient]

こんにちは。キキです。

お久しぶりです。本当にすごく久しぶりですね。

前回は11月30日ですか…。3か月ぶりですね

最近のFXの成績は

1月は-4.7%

2月は-0.4%

全然ダメでした(ノ△・。)

3月は今のところ+0.2%

1か月の目標は+8%としていて

これでコツコツ頑張っていこうかなと考えています

後、花粉症が始まってくしゃみがすごい!!

目もすごいかゆいし。はやく終わってくれないかなー

スポンサーリンク


さて、前回はと言うと…。どこまで進んでたっけ?

C# TcpClientクラスでサーバに接続して

データ送受信で終了しているみたいですね

前回、大切なことが抜けていて

TcpClientクラスをnewした後設定する項目がありまして

それを忘れていました

早速コードをのせておきます


private void button1_Click(object sender, EventArgs e)
{
    var client = new TcpClient("127.0.0.1", 3000);
    client.NoDelay = true;
    var ns = client.GetStream();
    var data = Encoding.ASCII.GetBytes("test");
    ns.Write(data, 0, data.Length);

    ns.Close();
    client.Close();
}


赤字の個所が前回が抜けていまして

この解説はMSDNのTcpClient.NoDelay プロパティ

確認してもらった方がわかりやすいです



すごく簡単に説明すると

一般的にはtrueに設定しておきましょう!!ってことです(笑)

次回はオアンダ サーバーへログオンしてみようを

予定しています

C# TcpClientを使用してサーバーへ接続してみよう① [C# TcpClient]

お久しぶりです。キキです。

最近はFXをずっと勉強していてFIXのことをすっかり

忘れていました。

FIXの方もプログラム作成が途中で止まっていて

最近は全然進んでいない状態なんですね…。

なぜだかあまりやる気がおこらない…。

成行注文、成行決済の動作確認ができてひとまずほっとしてます。

後はエラー処理とかイレギュラー処理とか

後は…、タイムアウト処理もありますね。

結構実装する必要があります。

むしろこっちの方が大事ですよね…。

それが終わったらOCOとかいろんな注文方法の実装とか

してみて、それが完成したらライブラリでまとめることが

できそうですね。

その次は他の人がライブラリを使用するとして、Chart Controlを

使用してGUIを構築していきたいです。

まだまだ先は長いな~と感じております。

スポンサーリンク


さて、今日はサーバーへ接続する基本となるコードを

C# TcpClientクラスを使用して説明していきます。

ここから少しずつ発展させて使えるようにしていきましょう

もう少し詳しく調べたいという方はDOBON.NETさんで

調べてください

以下はサーバーへ接続するコードになります

今回使用するサーバーのプログラムはこちらの
TcpListenerをダウンロードしてください
※実行には.NET Framework 4.5が必要です
TcpListener.exeを起動したらスタートボタンを押してください。
クライアントからメッセージがくると
テキストボックスに表示します

private void button1_Click(object sender, EventArgs e)
{
    var client = new TcpClient("127.0.0.1", 3000);
    var ns = client.GetStream();
    var data = Encoding.ASCII.GetBytes("test");
    ns.Write(data, 0, data.Length);

    ns.Close();
    client.Close();
}


簡単に説明します

TcpClientクラスを作成するときに接続先の

IPアドレスとポートを設定します

"127.0.0.1"はローカルホストへ接続します。

同じPC上で動作しているサーバーへ接続すると

思っておいて大丈夫です。

3000はポート番号になります。

ポート番号はあらかじめサーバーが決めておいた

値を指定します。今回は勝手に3000を使用すると決めました。

クライアントはポート番号がわからないと接続できないので

教えてもらう必要があります。

OANDAにAPIを申し込んだ時も接続先アドレスと

ポート番号を教えてもらっているはずです。

次にデータの受け渡しをするために

TcpClientクラスからNetworkStream(上記コードでは変数名ns)を

取得します。var ns = client.GetStream();の個所です。

まぁ、ファイルポインタと同じような感じです。

これに対してWrite,Read処理を行っていきます。

送信するデータはbyte[]にする必要があるので

stringからbyte[]へ変換しています。

var data = Encoding.ASCII.GetBytes("test");の個所になります

変換はASCIIからbyte[]へ変換していますが

UTF8からも変換できます。これはサーバー側がどの文字コード

で処理するかによって変わるのかなと思っています。

試しにカタカナ"テスト"を送信するとサーバーでは???と表示されます

ASCIIで変換しているからですね。

クライアント、サーバー共にUTF8で変換すれば正しく表示されます。

FIX ProtocolではASCIIからbyte[]へ変換して送信すれば今のところ

動作しています。まぁ、他のブローカーでも大丈夫でしょう

最後は後処理ですね。



と、かなり大雑把な説明になりました。

次回はC# TcpClientを使用してサーバーへ接続してみよう②を

予定しています
C# TcpClient ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。