痔になりやすい生活習慣とは?

おせわになっています。
現在、秋月のH8ボート3069+RTL8019ボードを使用して、TCP/IPの通信プログラムを作成して
いたます。
ボードはホスト側に成っています。


H8OS等は使用していません。

パケットの送受信も有る程度問題なく出来ていて、クライアントからの通信確立も出来ています。
データの送受信を行っているときに、1バイトデータ 0x02を送信使用としたら、一番下のような
エラーが出てきました。

1バイトデータで0x00、0x01、0x03等は問題なく送れています。
Wiresharkで取り込んだデータの一部分を掲載します。

又、エラーとして[Expert Info (Error/Malformed): Malformed Packet (Exception occurred)]と
表示されていますが、実際何が原因でエラーに成っているのかが判りません。

有る程度強引に合わせこんでデータを作っている部分も有るのですが、0x02のデータだけが
送れないというのが判りません。
データを見て頂き、判る方がいましたら教えてください。



[Calculated window size: 64240]
[Window size scaling factor: -2 (no window scaling used)]
Checksum: 0xd1b9 [validation disabled]
[Good Checksum: False]
[Bad Checksum: False]
[SEQ/ACK analysis]
[Bytes in flight: 1]
Data (1 byte)
Data: 03
[Length: 1]
VSS-Monitoring ethernet trailer, Source Port: 0
Src Port: 0
0000 00 40 45 32 27 35 02 00 03 cb 36 06 08 00 45 00
0010 00 29 fc d7 40 00 80 06 3d ac ac 14 64 00 ac 14
0020 04 22 29 04 06 42 65 62 b7 da 9e 32 35 28 50 10
0030 fa f0 d1 b9 00 00 03 00 00 00 00 00 00
              --- このデータは送れている。



Window size value: 64240
[Calculated window size: 64240]
[Window size scaling factor: -2 (no window scaling used)]
Checksum: 0x8254 [validation disabled]
[Good Checksum: False]
[Bad Checksum: False]
[SEQ/ACK analysis]
[Bytes in flight: 1]
[Malformed Packet: FMTP]
[Expert Info (Error/Malformed): Malformed Packet (Exception occurred)]
[Message: Malformed Packet (Exception occurred)]
[Severity level: Error]
[Group: Malformed]
VSS-Monitoring ethernet trailer, Source Port: 0
Src Port: 0
0000 00 40 45 32 27 35 02 00 03 cb 36 06 08 00 45 00
0010 00 29 fc d7 40 00 80 06 3d ac ac 14 64 00 ac 14
0020 04 22 29 04 09 2f 65 62 b7 da d1 ae 4f 24 50 10
0030 fa f0 82 54 00 00 02 00 00 00 00 00 00
              --- このデータは送れていない。

宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

>又、エラーとして[Expert Info (Error/Malformed): Malformed Packet (Exception occurred)]と


>表示されていますが、実際何が原因でエラーに成っているのかが判りません。

ざっと見た程度ですが……。

>0010 00 29 fc d7 40 00 80 06 3d ac ac 14 64 00 ac 14
>0010 00 29 fc d7 40 00 80 06 3d ac ac 14 64 00 ac 14

IPヘッダのIdentificationが同じ値(0xd7fc)のIPパケットで問題ないのですか?
手元のSSHサーバに接続したときのモノ(SSHサーバからのもののみ)では…
Identification: 0x0000 (0)
=>3WayハンドシェークのSYNパケットの返答
Identification: 0xdb28 (56104)
=>ハンドシェーク完了後、SSHサーバが送信してきたウェルカムメッセージ
Identification: 0xdb29 (56105)
=>クライアントからのパケットに対するACK応答パケット
Identification: 0xdb2a (56106)
=>SSHサーバからのオプションなどのクライアントへの通知
というように値が更新されていってますが。

パケットがMTUなどによって分割された場合にIdentificationが同じ値になることはあるようですが、その場合はFlagsとFlagment Offsetで制御されるハズです。
が…Flags(ダンプだと0x0014の場所の上位3ビット)のビット1が1となっていますので「分割を許可していない」状態ですし、Flagment Offsetは同値の0番となっています。
よって受信側では「不正なIPパケット」として破棄しますから、その次のTCP処理まで進まないかと思われますが…そこのところどうでしょうか?

参考URL:http://www.itbook.info/study/p89.html

この回答への補足

Wr5 様

ご丁寧な回答有難うございます。

Identificationに関しては、プログラムでデータを増えるようにしましたが、やはり0x02の1バイトだけが送れません。

おそらく、お知らせ頂いた部分に何らかの不具合が有るだろうとは思いますので、もうしばらくプログラムの見直し等して見ます。

又なにか判りましたらお知らせ頂けると大変有りがたいです。

以上宜しくお願いします。

補足日時:2013/02/03 16:22
    • good
    • 0
この回答へのお礼

Wr5 様

有難うございました。
自己解決しました。

サーバー側からの送信信号しか見ていませんでしたが、クライアント側(Windows)から接続を確立し、その後0x02を送信させると同じ現象が発生しました。

その後リトライで再度0x02を送信するのですが、そのときにクライアントがkeepalive状態に成っていて、同じデータを送信していました。
この時には0x02をデータとして表示しています。
この事から、単独で0x02の1バイトを送信出来ないと判断しました。
参考文献を読まないといけないと思いますが、Windowsパソコンから送信して同じ結果に成っているので
そういうものだと判断しておきます。

今回は有難うございました。

お礼日時:2013/02/04 21:13

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QwiresharkでパケットモニタするとRetransmissionが多発しているという意味は?

現在、自分で作成したパケット送信クライアントプログラムをテストしており、3秒に1回のタイミングでインターネット上にあるサーバのグローバルipアドレスに対し、TCPパケットを発信させて受信するというテストを行っています。
しかし、3秒に一回データを送っているはずなのに、その間隔10秒とか20秒とか間隔が開いてしまう時があります。

wiresharkというパケットモニタソフトで送信側、受信側共にパケットモニタを行ってみたところ、”Retransmission”が多発しているということがわかりました。(tcp.analysis.retransmissionというフィルタ設定で検索)この現象はある時とない時があります。テストして10日ぐらい経つのですが、このパケットが確認されるのはお昼の12時頃と夕方の6時頃が多いのですが、このことからどのようなことが起こっていると考えられますか?

わかる方いらっしゃいましたらご教授よろしくお願いいたします。

Aベストアンサー

簡単に言うと「トラフィック過多によるパケットの再送が多発している」です。

噛み砕いて言えば「回線が混雑していて、送信したパケットが、他の誰かが送信したパケットと衝突(コリジョンが発生)してパケットが消えた。なので、もう一度、送り直した」と言う事。

>このパケットが確認されるのはお昼の12時頃と夕方の6時頃が多いのですが、このことからどのようなことが起こっていると考えられますか?

「お昼休み、終業時間の6時になると、みんな、メールをチェックしたり、個人的にインターネットを閲覧し、トラフィック過多が起き、回線が異常に混雑する」と言う事が起きていると考えられます。

解消するには以下の方法があります。
・「休み時間も、終業時間後も、プライベートでネットを使うな!」と言う「通達」を全社に出す
・社内LANを、トラフィック過多によるコリジョンが起きないよう高速で帯域のあるネットワークカード、LANハブ、ルーターに変える
・受信側と送信側を、社内LANから(電気的、アドレス的に)独立した別のLANにする

要は「混んでる時間帯なので仕方が無い」って事です。

簡単に言うと「トラフィック過多によるパケットの再送が多発している」です。

噛み砕いて言えば「回線が混雑していて、送信したパケットが、他の誰かが送信したパケットと衝突(コリジョンが発生)してパケットが消えた。なので、もう一度、送り直した」と言う事。

>このパケットが確認されるのはお昼の12時頃と夕方の6時頃が多いのですが、このことからどのようなことが起こっていると考えられますか?

「お昼休み、終業時間の6時になると、みんな、メールをチェックしたり、個人的にインターネットを...続きを読む

QWiresharkでみるときの、1回のパケット

Wiresharkでみるときの、1回のパケットを追う方法を探してます。

TCP通信にて、通信確立後にデータのやり取りをしている通信を数時間tcpdumpにて取得し、
Wiresharkで流れをみています。そのときに、1回のデータのやり取りと見るために方法を教えてください。


クライアントからのリクエストとサーバからのレスポンスで、

1回目クライアントからデータ送信し、
複数かいやり取りして、終了(200 OKを返却して)

2回目クライアントからデータ送信し、
複数かいやり取りして、終了(200 OKを返却して)

という動作を繰り返してますが、

この1回目がここからここまでのパケット、2回目がここからここまでのパケットと知りたいのです。

なんとなくみると、ストリームNoなどもありますが、
ストリームNoが1回の通信後とのNoかとおもったら、
ストリームNoでフィルタしたら、
1回目5回目8回目・・と複数回のものが同じストリームNoであり、
どうゆうことだとうと疑問になってます。

詳しい方よろしくお願いします。

Aベストアンサー

No1です。
>TCPストリーム単位でも複数のやりとりがあるのか?わからなくて悩んでます。

昔のHTTP/0.9というプロトコルでは、リクエストに対してレスポンスがあればそれでストリームを終わらせてましたが、現在のHTTP/1.1では1つのTCPストリームで複数のリクエストーレスポンスを行うのが普通です。
また、レスポンスを待たずに複数のレスポンスを続けて投げることも可能です。

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む

Qポートの80と443

こちらのサービス(https://secure.logmein.com/)を利用すると、インターネットを見られるサーバーのポートの80と443が空いていればルータやファイアウォールに特段の設定なく外部からサーバーを操作できるそうですが、逆にサーバーのポートの80や443を空けることには何か危険性があるのでしょうか。

Aベストアンサー

ポート80は一般的なHTTP、ポート443はHTTPSです。
この2つのポートがあいていなければインターネット接続(WEBブラウジング)は出来ません。
ですから、ほとんどのファイアウォールでこのポートは開いています。(インターネット接続を制限している社内LANでは当然閉じていますが)

ちなみに、よく使うポートとしてはFTPで20、21、SMTP(送信メール)で25、受信メールPOP3で110あたりです。セキュリティポリシー上、この辺は制限される事も多いですが、HTTP 80、HTTPS(暗号化用)443は通常閉じません。


危険性?
WEBプロトコルを使ってFTP的なファイル転送(WebDAV)やVPN等も出来るようになっています。当然そこにはある種の危険はつきものですが、WEBブラウジングに伴う危険と大きく変わりません。ウィルス等に感染していればこの2つのポートだけでも相当危険でしょうね。

参考まで。

Qネットワーク遅延について

お世話になります。
ご面倒かけますが、ご回答頂ければ助かります。

状況を説明させて頂きますと
あるプログラム(計算して結果を出力)をネットワーク上で共有フォルダにアクセスして
実行しております。

(1)スタンドアローンで実行(自分のPCにプログラムを保存)すると、実行時間が1~2分
(2)ネットワークの共有フォルダにアクセスして実行した場合 5分~10分かかります。
※できるだけマスタ配布のような業務が入る為、スタンドアローンでは利用しない方針です

なぜこんなに実行時間に差がでるのかという質問を頂いてます。

ネットワーク上のプログラムを実行しているのですから、ある程度遅くなるのは
当たり前です。とは回答しているのですが、理解してもらえません。

WireSharkを利用して、パケットを拾ったのですが
・ TCP Dup ACK
・ TCP Retransmission
・ TCP Previous segment lost
上記のようなパケットを拾いましたが、パケットを分割や再送信を行っているので
遅くなっていると話をしましたが、これがネットワークの問題なのかプログラムの問題か
確認(考え方)するにはどうしたらいいでしょうか?

参考程度でも結構ですので、お願いいたします。

お世話になります。
ご面倒かけますが、ご回答頂ければ助かります。

状況を説明させて頂きますと
あるプログラム(計算して結果を出力)をネットワーク上で共有フォルダにアクセスして
実行しております。

(1)スタンドアローンで実行(自分のPCにプログラムを保存)すると、実行時間が1~2分
(2)ネットワークの共有フォルダにアクセスして実行した場合 5分~10分かかります。
※できるだけマスタ配布のような業務が入る為、スタンドアローンでは利用しない方針です

なぜこんなに実行時間に差がでるのかという...続きを読む

Aベストアンサー

まず前提として、
スタンドアロンの場合、自らのプログラムやデータはメモリー上に格納され
更新など行っても、実際にはファイルに書かれるのでは無くメモリー上で更新されます。
なので、物理的なアクセスの発生が少なく高速で動作します。
しかしネットワークの場合は、「共有」という概念が働く為なるべくメモリーで
処理するのでは無く物理的なファイルに更新がかかるようになります。
※このあたりはソフトの設計にも共有の仕方によりOSの制御にもよりますが....

また、それらの読み込み・更新毎にネットワークを使ってデータやり取りする為、
ネットワークへの負荷が掛かること、ネットワークの混雑具合に影響される事など
速度低下する要因が多くなりますので、ネットワーク上のデータを利用するという事は
こういう事だと理解してもらう必要があります。

そして、パケットのエラーの内容を見ていると、ネットワークで障害が発生していますね。
原因としては、ケーブル・HUB・ルータ・NICなど機器全てを疑う必要があります。
まず、同じ事を複数のパソコンで実行して、同じような状況になる端末を特定し、
その影響範囲を調べます。

結果、その範囲に使ってる機器が特定されますので、
その機器を交換して問題ない事を検証すれば良いと思います。

まず前提として、
スタンドアロンの場合、自らのプログラムやデータはメモリー上に格納され
更新など行っても、実際にはファイルに書かれるのでは無くメモリー上で更新されます。
なので、物理的なアクセスの発生が少なく高速で動作します。
しかしネットワークの場合は、「共有」という概念が働く為なるべくメモリーで
処理するのでは無く物理的なファイルに更新がかかるようになります。
※このあたりはソフトの設計にも共有の仕方によりOSの制御にもよりますが....

また、それらの読み込み・更新毎にネットワ...続きを読む

Qパケットロスと遅延について

(1)パケットロスって何でしょうか?
(2)パケットロスが10%でも、回線品質は良くないのでしょうか?WAN間でも必ずパケットロスは0%でないと品質は良いとは言えないのでしょうか?
(3)パケットロスが発生しても、データは遅くても完全に届くものでしょうか?それともパケットロス分のみ捨てられて、相手に届くのでしょうか?
(4)パケットロスが発生すると、遅延も必ず起きているのでしょうか?
(5)パケットロスと遅延がネットワーク側に問題があると判明した場合、どのような措置を講ずるのでしょうか?
(6)TCPパケットはパケットロスがあると再送しますが、UDPパケットは再送しないで破棄されるのでしょうか?

以上、ネットワークに精通されておる方、お願い申し上げます。

Aベストアンサー

> (1)パケットロスおよび遅延はルータ/SWのMIBからNMSへトラップとして上がってくるのですが、パケットロスおよび遅延はルータ/SWのどの機能で判断しているのでしょうか?

それなりのL2SWはインタフェース(ポート)ごとにトラフィックやパケットロスのカウンタを持っているので、そのカウンタが上がるタイミングでSNMPトラップを出力しているはずです
遅延もSNMPトラップが出ますか?
CiscoのルータはSAA(Service Assurance Agent)という機能があって遅延やジッタをSNMP MIBで見たりできたと思いますが、他のL2SWで遅延を測定/監視できるものは知らないです

> (2)遅延は何msまでが許容範囲とかありますか?

アプリケーションによります
VoIPなどはシビアに効いてきますし、Web参照であれば1秒でもあまり気にならないでしょう
VoIPは遅延だけでなくジッタ(揺らぎ、遅延のばらつき具合)も影響します
ちなみにY.1541は遅延やジッタも定義してますけど、ちゃんとリンク先の情報読みました?

> (3)パケット落ちは、 ping何発中、何発までならOKとかありますでしょうか?

これもアプリケーション次第でしょう
再送の有無や再送にかかる時間とそれがどこまで許容できるか次第かと

> (1)パケットロスおよび遅延はルータ/SWのMIBからNMSへトラップとして上がってくるのですが、パケットロスおよび遅延はルータ/SWのどの機能で判断しているのでしょうか?

それなりのL2SWはインタフェース(ポート)ごとにトラフィックやパケットロスのカウンタを持っているので、そのカウンタが上がるタイミングでSNMPトラップを出力しているはずです
遅延もSNMPトラップが出ますか?
CiscoのルータはSAA(Service Assurance Agent)という機能があって遅延やジッタをSNMP MIBで見たりできたと思いますが、他のL2...続きを読む

QNTPで同期が始まらない

こんにちは。
度々すみません、NTPの設定をしましたがどうも同期が始まりません。

「ntpdate 130.69.251.23」と手動同期は成功します。
しかしntpデーモンを起動し1時間以上放置しても同期されません。
※外部タイムサーバー参照としてます

ntp.confは下記のとおりです。
---------------------------------------------------
server 133.100.9.2 # clock.nc.fukuoka-u.ac.jp
server 130.69.251.23
driftfile /var/lib/ntp/drift
---------------------------------------------------

でntpq -pの結果は下記となります。

remote refid st t when poll reach delay offset jitter
==============================================================================
133.100.9.2 .INIT. 16 u - 64 0 0.000 0.000 4000.00
130.69.251.23 .GPS. 1 u 27 64 377 8.015 -99970. 17262.6

同期ができれば「remote」列に「*」が表示されると思っています。
何か設定が足りないでしょうか?。
尚、「/vat/log/message」をtailしてますが特にエラーは無さそうです。

よろしくお願いします。

こんにちは。
度々すみません、NTPの設定をしましたがどうも同期が始まりません。

「ntpdate 130.69.251.23」と手動同期は成功します。
しかしntpデーモンを起動し1時間以上放置しても同期されません。
※外部タイムサーバー参照としてます

ntp.confは下記のとおりです。
---------------------------------------------------
server 133.100.9.2 # clock.nc.fukuoka-u.ac.jp
server 130.69.251.23
driftfile /var/lib/ntp/drift
---------------------------------------------------

でntp...続きを読む

Aベストアンサー

#4のqaaqです。

○ntp.conf 関連
server 行に "iburst" を付けておきましょう。
server ntp.nict.jp iburst <--こんな感じになります。

ntp サーバ起動時の時刻調整の収束時間が早くなります。
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=ntp.conf&dir=jpman-5.4.0%2Fman&sect=0

○ntpdate での時刻調整
ntpdate -b -u [サーバ名] を複数回実行して、"offset の値が0.1以下"になるまで、強制的に時刻調整して下さい。

○ハードウエアclockの修正
hwclock -w コマンドでハードウエアclockを合わせます。
http://www.linux.or.jp/JM/html/util-linux/man8/hwclock.8.html

○ntpdの動作
ntpによる時刻調整は、調整幅が通常128mSと小さいので、1時間は様子をましょう。
2時間程度経過しても、時刻修正の兆候が見られない場合ハードウェアの不良も考えられます。

時刻調整の兆候としては、
・logファイルに 一時間毎に調整したメッセージが書かれる。
Jan 7 21:57:40 ntpd[91145]: offset 0.000994 sec freq -190.802 ppm error 0.000076 poll 8
・ntpq -p の出力の最初の桁に"*,+"が付く。また、reach が377になる。
% ntpq -np
remote refid st t when poll reach delay offset jitter
+192.168.0.102 GPS_NMEA(0) 2 u 3 32 377 0.926 -0.330 0.023
*192.168.0.192 GPS_NMEA(1) 2 u 10 32 377 0.747 -0.336 0.023
192.168.0.9 PPS(1) 2 u 3 32 377 0.757 6.559 0.161


○その他
・PC起動時には、システムクロックを計測してその後の動作の基準にしていますが、
CMOSバッテリ不足やハードウェアに何らかの異常があるととんでもない時刻を示すことがあります。(要修理です)
・BIOSの時計も起動時の初期時刻として使われてしまうので、ある程度合わせておいた方がいいです。

#4のqaaqです。

○ntp.conf 関連
server 行に "iburst" を付けておきましょう。
server ntp.nict.jp iburst <--こんな感じになります。

ntp サーバ起動時の時刻調整の収束時間が早くなります。
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=ntp.conf&dir=jpman-5.4.0%2Fman&sect=0

○ntpdate での時刻調整
ntpdate -b -u [サーバ名] を複数回実行して、"offset の値が0.1以下"になるまで、強制的に時刻調整して下さい。

○ハードウエアclockの修正
hwclock -w コマンドでハ...続きを読む

Qsedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。

例:
X="a"
Y="b"
echo test.txt | sed 's/${X}/${Y/g}' >test.txt

sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

Aベストアンサー

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。

何も囲まないか、"・・・"で囲むかです。

QSocketのSend関数でのCLOSEの検知 [Linux]

Linux環境でSocket(dm:PF_INET,type:SOCK_STREAM)を使用しての、
Client&ServerプログラムをCで作成しているのですが、
そこでのSend関数の使い方についてご助力ください。

Client&Serverプログラムは下記のような動きをします。

[Client]
ServerへConnectした後、複数のDataを数秒間隔でServerへ
送信(send関数使用)します。受信(recvやread関数等)は、
一切行いません。

[Server]
ClientからのConnectを受け付けた後、Clientから受信(recv関数
使用)したDataを標準出力へ表示する。送信(sendやwrite関数
等)は、一切行いません。


さて、ここでもしClientプログラムがCloseを発行したり、マシン
DOWN等の理由でConnectionが切断され、Server側のSocketが
CLOSE_WAIT状態になった場合、Bufferに溜まっていたDataを
すべて受けきった後、recv関数が0を返してくれるので
相手が終了したことがわかります。

ここからが質問のMainです。

では、もしServerプログラムがCloseを発行したり、マシン
DOWN等の理由でConnectionが切断され、Client側のSocketが
CLOSE_WAIT状態になっても、CLOSE_WAIT直後のsend関数が
なぜか正常に処理されてしまいます。無論このDataは、
Server側は受け取りません。この次のsend関数実行時に
EPIPEが返ってくるので、ここでようやくSocketが切断された
ことが判ります。

これを何とかCLOSE_WAIT状態になった直後から、send関数で
切断を検知できるようにできないでしょうか。

よろしくお願いします。

以上

Linux環境でSocket(dm:PF_INET,type:SOCK_STREAM)を使用しての、
Client&ServerプログラムをCで作成しているのですが、
そこでのSend関数の使い方についてご助力ください。

Client&Serverプログラムは下記のような動きをします。

[Client]
ServerへConnectした後、複数のDataを数秒間隔でServerへ
送信(send関数使用)します。受信(recvやread関数等)は、
一切行いません。

[Server]
ClientからのConnectを受け付けた後、Clientから受信(recv関数
使用)したDataを標準出力へ表示する。送信(se...続きを読む

Aベストアンサー

#3です。
>完全な保証ではないのですが、”送れた/送れない”をきちんと
ログとして残す必要があるのです。

なるほど、そういう事情でしたか。それだと、それなりの信憑性が要求されますね。

>それと最初にご提案いただいたrecvをNonBlockモードで呼び出す
方法ですが、これだとrecvのリターン値は0が返ってこないでしょうか?

Linuxで以下のような、プログラムを組んで確認しました。

//送信前に、ノンブロッキングでrecvする。
ret = recv(sock,rbuf,sizeof(rbuf),MSG_DONTWAIT);
if (ret == -1 && errno == EAGAIN){
//正常なので送信可能
ret = send(sock,msg[i],sendlen,0);
if (ret != sendlen){
//送信エラーの処理
}
}else{
//切断検知時の処理
 // CLOSE_WAITになると ret=0が返る
}

サーバー側で切断時、直ちにrecvで戻り値=0となり、エラーの検知ができました。ret==-1 かつ errno==EAGAIN
であれば、回線は正常状態です。

#3です。
>完全な保証ではないのですが、”送れた/送れない”をきちんと
ログとして残す必要があるのです。

なるほど、そういう事情でしたか。それだと、それなりの信憑性が要求されますね。

>それと最初にご提案いただいたrecvをNonBlockモードで呼び出す
方法ですが、これだとrecvのリターン値は0が返ってこないでしょうか?

Linuxで以下のような、プログラムを組んで確認しました。

//送信前に、ノンブロッキングでrecvする。
ret = recv(sock,rbuf,sizeof(rbuf),MSG_DONTWAIT);
if (ret == -...続きを読む

Qネットワークのトラフィック量を測定できる方法はありますか?

 すいません。ものすごく困っております。

 会社の工場にPAnasonic製のネットワークカメラを20台程設置しているのですが、ネットワークへの負荷が大きいため、たびたび画像が固まることがあります。

 そこでどこの箇所で負荷がかかっているのか測定したのですが、なにかツールもしくは測定方法はないでしょうか。例えばHUBとHUBの間のLAN線にかかっているトラフィック量を測定してみたいです。

 すいませんが、ご教示願えないでしょうか。

 よろしくお願いいたします。

Aベストアンサー

HUBがSNMP対応のインテリジェントHUBであれば、そんなに難しい問題ではないですね。SNMPの設定を行った上で、ネットワーク管理ツールでトラフィックを計測すればOKです。

そうでない場合はちょっとやっかいですね。
とりあえず、ネットワークの図面を書いてみて、どこにどんなHubがあって、どんなPCやネットワークカメラなどの機器がつながっているかを書き出してみてはいかがでしょう?
具体的なトラフィックの数値がわからなくても、怪しいところはあぶり出せると思いますよ?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング