![Question :?:](./images/smilies/icon_question.gif)
アプリケーションのサンプルは読みずらいので、APIを使った簡単なサンプルは無いでしょうか?
よろしくお願いします。
ネットワークアプリケーションは TCP、UDP また サーバ、クライアント によりソースコードの書き方が若干異なります。yys99 さんが書きました: アプリケーションのサンプルは読みずらいので、APIを使った簡単なサンプルは無いでしょうか?
コード: 全て選択
// ※ "NET_C"定義は定義有りで μC3/Compact, 無しでμC3/Standard を表します。
/* エコーサーバ処理 */
ER echo_server(void)
{
ER ercd;
T_NODE host;
VB ebuf[256];
#ifndef NET_C
ID ID_TCP_ECHO;
/* ソケットの生成 */
memset(&host, 0, sizeof(host));
host.num = 1;
host.ver = IP_VER4;
host.ipa = INADDR_ANY;
host.port = 12345;
ercd = cre_soc(IP_PROTO_TCP, &host);
if (0 >= ercd) {
return ercd;
}
ID_TCP_ECHO = ercd;
#endif
/* クライアント接続待ち */
memset(&host, 0, sizeof(host));
ercd = con_soc(ID_TCP_ECHO, &host, SOC_SER);
if (E_OK != ercd) {
return ercd;
}
/* エコー動作 (受信したパケットをそのまま送信元に送信する) */
for (;;) {
ercd = rcv_soc(ID_TCP_ECHO, ebuf, sizeof(ebuf));
if (0 >= ercd) break; /* 切断 もしくは 通信エラー発生で処理を抜ける */
ercd = snd_soc(ID_TCP_ECHO, ebuf, ercd);
if (0 >= ercd) break; /* Error */
}
/* 切断処理 */
ercd = cls_soc(ID_TCP_ECHO, SOC_TCP_CLS);
#ifndef NET_C
/* ソケットの削除 */
ercd = del_soc(ID_TCP_ECHO);
#endif
return ercd;
}
/* エコーサーバ用タスク */
void EchoServerTask(VP_INT exinf)
{
ER ercd;
do {
ercd = echo_server();
} while (E_OK == ercd);
/* 切断(or ソケット削除)の異常発生時処理 */
}
コード: 全て選択
// ※ "NET_C"定義は定義有りで μC3/Compact, 無しでμC3/Standard を表します。
/* エコーサーバ処理 */
ER echo_server_UDP(void)
{
ER ercd;
T_NODE host;
VB ebuf[256];
#ifndef NET_C
ID ID_UDP_ECHO;
/* ソケットの生成 */
memset(&host, 0, sizeof(host));
host.num = 1;
host.ver = IP_VER4;
host.ipa = INADDR_ANY;
host.port = 12345;
ercd = cre_soc(IP_PROTO_UDP, &host);
if (0 >= ercd) {
return ercd;
}
ID_UDP_ECHO = ercd;
#else
/* コンフィグレータでID名が ID_UDP_ECHO のソケットを作成する */
#endif
/* クライアントからの接続待ちに con_soc() は不要 */
/* エコー動作 (受信したパケットをそのまま送信元に送信する) */
for (;;) {
ercd = rcv_soc(ID_UDP_ECHO, ebuf, sizeof(ebuf));
if (E_TMOUT == ercd) continue; /* タイムアウトで処理継続 */
if (0 >= ercd) break; /* 通信エラー発生で処理を抜ける */
/* 受信パケットの送信元アドレスを確認する */
ref_soc(ID_UDP_ECHO, SOC_IP_REMOTE, (VP)&host); /* 受信元のアドレスを取得して */
con_soc(ID_UDP_ECHO, &host, 0); /* 送信先に指定する */
ercd = snd_soc(ID_UDP_ECHO, ebuf, ercd);
if (0 >= ercd) break; /* Error */
}
/* UDPはコネクションレスのため cls_soc() はしなくても良い (接続先情報がクリアされる) */
ercd = cls_soc(ID_UDP_ECHO, 0);
#ifndef NET_C
/* ソケットの削除 */
ercd = del_soc(ID_UDP_ECHO);
#endif
return ercd;
}
/* エコーサーバ用タスク */
void EchoServerTask(VP_INT exinf)
{
ER ercd;
do {
ercd = echo_server_UDP();
} while (E_OK == ercd);
/* 切断(or ソケット削除)の異常発生時処理 */
}