TCPソケット通信でひかり電話CTI(CTIサーバー)にアクセスし、CTIサーバーのマイドキュメントフォルダへのパスを受信するc#サンプルです。
<サンプルプログラム c#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HikariCTI_Sample_008
{
class Program
{
static void Main(string[] args)
{
//SQL文
string sendMsg = "[CHK_MY_DOCUMENT_PATH]";
//サーバーのIPアドレス(または、ホスト名)とポート番号
string ipOrHost = "192.168.24.9";
int port = 3000;
//TcpClientを作成し、サーバーと接続する
System.Net.Sockets.TcpClient tcp =
new System.Net.Sockets.TcpClient(ipOrHost, port);
Console.WriteLine("サーバー({0}:{1})と接続しました({2}:{3})。",
((System.Net.IPEndPoint)tcp.Client.RemoteEndPoint).Address,
((System.Net.IPEndPoint)tcp.Client.RemoteEndPoint).Port,
((System.Net.IPEndPoint)tcp.Client.LocalEndPoint).Address,
((System.Net.IPEndPoint)tcp.Client.LocalEndPoint).Port);
//NetworkStreamを取得する
System.Net.Sockets.NetworkStream ns = tcp.GetStream();
//読み取り、書き込みのタイムアウトを10秒にする
//デフォルトはInfiniteで、タイムアウトしない
//(.NET Framework 2.0以上が必要)
ns.ReadTimeout = 10000;
ns.WriteTimeout = 10000;
//サーバーにデータを送信する
//文字列をByte型配列に変換
//エンコーディングは、SJIS
System.Text.Encoding enc = System.Text.Encoding.GetEncoding("shift-jis");
byte[] sendBytes = enc.GetBytes(sendMsg + '\n');
//データを送信する
ns.Write(sendBytes, 0, sendBytes.Length);
Console.WriteLine(sendMsg);
for(;;)
{
//サーバーから送られたデータを受信する
System.IO.MemoryStream ms = new System.IO.MemoryStream();
byte[] resBytes = new byte[256];
int resSize = 0;
do
{
//データの一部を受信する
resSize = ns.Read(resBytes, 0, resBytes.Length);
//Readが0を返した時はサーバーが切断したと判断
if (resSize == 0)
{
Console.WriteLine("サーバーが切断しました。");
break;
}
//受信したデータを蓄積する
ms.Write(resBytes, 0, resSize);
//まだ読み取れるデータがあるか、データの最後が\nでない時は、
// 受信を続ける
} while (ns.DataAvailable || resBytes[resSize - 1] != '\n');
//受信したデータを文字列に変換
string resMsg = enc.GetString(ms.GetBuffer(), 0, (int)ms.Length);
ms.Close();
//末尾の\nを削除
resMsg = resMsg.TrimEnd('\n');
Console.WriteLine(resMsg);
if(resMsg.IndexOf("[MY_DOCUMENT_PATH]") >= 0)
{
break;
}
}
//閉じる
ns.Close();
tcp.Close();
Console.WriteLine("切断しました。");
Console.ReadLine();
}
}
}
<サンプル画面 : CTIサーバーのマイドキュメントフォルダへのパスを問い合わせる>
「[MY_DOCUMENT_PATH]マイドキュメントフォルダへのパス」が受信されます。

