Armadilloフォーラム

TCP/IP サーバーへの接続

ysdc_sasaki

2015年2月26日 11時54分

ysdc_sasaki です。

A420をEtherNet経由でサーバーに接続して通信する機器として検討しています。
[困っていること]----------------------------------------------------
端末:A420からサーバーに対してポート番号を指定して送信する。
サーバー側では端末から受信すると応答伝文を返信するように
サーバーのアプリは作られている。
サーバーのウィンドウ表示を見ていると、端末からポート番号が
届いていないので、空いている適当なポート番号を割り振って返信している。
端末:A420は指定したポート番号に応答が返って来ないので
通信が成立していない。

※端末をA420では無く別のパソコンを繋いで動作を確認すると
問題なく通信が成立している。 サーバーのアプリには問題なさそうです。

端末としてA420を使うと上手く行かない。
--------------------------------------------------------------

[動作条件]
・端末設定
 IPアドレス等、起動時ソフトウェアで設定。
・UDP/IP通信
 通信先:最大5台のサーバー
 ポート:送受信とも固定(例 12345)
・TCP/IP通信
 通信先:最大5台のサーバー
 ポート:送受信とも固定(例 12345)
[状況]
==========================================================
① 起動時、設定情報を参照し、IPアドレス、及び
サブネットマスクを設定する。
"ioctl"を使用し、LINK Down → 設定 → LINK Up を実施。
→ LINK Up完了後、UDP/IP設定へ。

② UDP/IP通信用ソケットを生成、bindを実施。
サーバーからのUDP/IPデータ受信後、TCP/IP設定へ

③ TCP/IP通信用ソケットを生成し、bind,connectを実施。
(TCP/IP通信用ソケットは最大10個作成します)
サーバーへTCP/IPデータ送信して、応答を受けて接続完了とする
==========================================================
① ②は正常終了しますが、③の工程で、[困っていること]に
記載した問題が起きます。

bind 時にエラーが出ます。 connectは正常終了します。

コメント

以下の (3) の bind() の呼び出しでエラーする際、戻り値は何でしょうか?

>[困っていること]----------------------------------------------------
>端末:A420からサーバーに対してポート番号を指定して送信する。
>サーバー側では端末から受信すると応答伝文を返信するように
>サーバーのアプリは作られている。
>サーバーのウィンドウ表示を見ていると、端末からポート番号が
>届いていないので、空いている適当なポート番号を割り振って返信している。
>端末:A420は指定したポート番号に応答が返って来ないので
>通信が成立していない。
>
>※端末をA420では無く別のパソコンを繋いで動作を確認すると
>問題なく通信が成立している。 サーバーのアプリには問題なさそうです。
>
>端末としてA420を使うと上手く行かない。

>・TCP/IP通信
> 通信先:最大5台のサーバー
> ポート:送受信とも固定(例 12345)
>[状況]
>==========================================================
>① 起動時、設定情報を参照し、IPアドレス、及び
>サブネットマスクを設定する。
>"ioctl"を使用し、LINK Down → 設定 → LINK Up を実施。
>→ LINK Up完了後、UDP/IP設定へ。
>
>② UDP/IP通信用ソケットを生成、bindを実施。
>サーバーからのUDP/IPデータ受信後、TCP/IP設定へ
>
>③ TCP/IP通信用ソケットを生成し、bind,connectを実施。
>(TCP/IP通信用ソケットは最大10個作成します)
>サーバーへTCP/IPデータ送信して、応答を受けて接続完了とする
>==========================================================
>① ②は正常終了しますが、③の工程で、[困っていること]に
>記載した問題が起きます。
>
>bind 時にエラーが出ます。 connectは正常終了します。

TCP 用のポート番号が、Armadillo Linux の標準設定では使用許可されておらず、そのために bind() でエラーしてしまうのかも知れません。
ご使用になっているポート番号ですが、[0..1023] の範囲でしょうか?
 http://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F…

--
古賀信哉 (株)サムシングプレシャス

> 以下の (3) の bind() の呼び出しでエラーする際、戻り値は何でしょうか?
>
> >[困っていること]----------------------------------------------------
> >端末:A420からサーバーに対してポート番号を指定して送信する。
> >サーバー側では端末から受信すると応答伝文を返信するように
> >サーバーのアプリは作られている。
> >サーバーのウィンドウ表示を見ていると、端末からポート番号が
> >届いていないので、空いている適当なポート番号を割り振って返信している。
> >端末:A420は指定したポート番号に応答が返って来ないので
> >通信が成立していない。
> >
> >※端末をA420では無く別のパソコンを繋いで動作を確認すると
> >問題なく通信が成立している。 サーバーのアプリには問題なさそうです。
> >
> >端末としてA420を使うと上手く行かない。
> …
> >・TCP/IP通信
> > 通信先:最大5台のサーバー
> > ポート:送受信とも固定(例 12345)
> >[状況]
> >==========================================================
> >① 起動時、設定情報を参照し、IPアドレス、及び
> >サブネットマスクを設定する。
> >"ioctl"を使用し、LINK Down → 設定 → LINK Up を実施。
> >→ LINK Up完了後、UDP/IP設定へ。
> >
> >② UDP/IP通信用ソケットを生成、bindを実施。
> >サーバーからのUDP/IPデータ受信後、TCP/IP設定へ
> >
> >③ TCP/IP通信用ソケットを生成し、bind,connectを実施。
> >(TCP/IP通信用ソケットは最大10個作成します)
> >サーバーへTCP/IPデータ送信して、応答を受けて接続完了とする
> >==========================================================
> >① ②は正常終了しますが、③の工程で、[困っていること]に
> >記載した問題が起きます。
> >
> >bind 時にエラーが出ます。 connectは正常終了します。
>
> TCP 用のポート番号が、Armadillo Linux の標準設定では使用許可されておらず、そのために bind() でエラーしてしまうのかも知れません。
> ご使用になっているポート番号ですが、[0..1023] の範囲でしょうか?
>  http://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F…
>
> --
> 古賀信哉 (株)サムシングプレシャス
>

ご助言いただきましてありがとうございました。ご指摘の部分も確認して問題無いことがわかりましたが、結果的に もっと基本的な誤りがあったようです。寄せ集めのプログラムのソースをリセットして作り直した結果正常に動作しました。

少し気になったのですが,
TCP/IP通信はクライアントがサーバーのポート番号を指定して接続を開始し,
接続と共にできた通信回路で双方向通信を行うと思います.
たぶんクライアント側のポート番号は勝手に選択されるのではないかと思います.
(あなまり詳しくないので,間違っていたら,すみません)

ですので,以下の部分だとクライアントのポート番号を送信しているようなので,
何に使っているのかなと疑問に思いました.

> [困っていること]----------------------------------------------------
> 端末:A420からサーバーに対してポート番号を指定して送信する。
> サーバー側では端末から受信すると応答伝文を返信するように
> サーバーのアプリは作られている。
> サーバーのウィンドウ表示を見ていると、端末からポート番号が
> 届いていないので、空いている適当なポート番号を割り振って返信している。
> 端末:A420は指定したポート番号に応答が返って来ないので
> 通信が成立していない。