• 締切済み

TCP/IPのソケット通信を使用して100ms毎にデータを送信するアプ

TCP/IPのソケット通信を使用して100ms毎にデータを送信するアプリケーションがあります。 このアプリケーションをPC(Windows XP)上で実行すると、実際には200ms毎にデータを送信しています。 TCP/IPのNagle処理により200ms毎にデータを送信しているようです。 Nagle処理をOFFする為に、レジストリの HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSMQ/Parameters の下に TCPNoDelay REG_DWORD 0x00000001 を追加したのですが、状況が変わりません。200ms単位で送信してしまいます。 レジストリ変更後は、再起動を行っています。 他に設定する方法があるのでしょうか? 宜しくお願いします。

みんなの回答

  • noyuo
  • ベストアンサー率39% (33/84)
回答No.2

windowsの擬似マルチタスク環境で、タイマー処理の正確なところは期待できないのでは? タイマーの指定を0.5倍 やそれ以下にして、前回の時刻との差が希望間隔以上かを判定してみる方法も考えられます。(あまり、小さくしすぎてもPCに負荷がかかりますので、その兼ね合いで値を決めてはどうですか?) 結局、PCの中では他のプログラムやサービスとのCPUの取り合いが行われているのですから。

Sendai-ikuyo
質問者

お礼

タイマーは疑っていません。 テストプログラムでTcpClientにNoDelayオプションを設定すると100ms毎にデータを送信する事ができるからです。今回の質問は、プログラムの変更を行なわずに、レジストリの設定で100ms毎の送信ができないかという事です。 レジストリTCPNoDelayを設定したのですが、100ms毎のデータ送信はできませんでした。 TCPNoDelayの説明は、 http://support.microsoft.com/kb/241777/ja に記載されています。 宜しくお願いします。

  • noyuo
  • ベストアンサー率39% (33/84)
回答No.1

100ms間隔送出のタイミングはどのように実現してますか? もしかして、100msタイマー?

Sendai-ikuyo
質問者

お礼

回答ありがとうございます。 テストプログラムを作成して確認しています。 コードは下記のようになっています。 private void DatasSend() { while (true) { SendStringData(); Application.DoEvents(); Thread.Sleep(int.Parse(textBox_wait.Text));  <---ここで100を指定 } }

関連するQ&A

  • レジストリからTCP/IP設定を調べたい

    OSは、Windows2000です。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\[数字フォルダ] の下の ServiceName でアダプタIDを調べてから、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\[アダプタID] で、TCP/IP設定を調べられることが解りました。 では、[数字フォルダ] はレジストリのどこを見れば解るのでしょうか?

  • レジストリ編集を元に戻したい

    とあるサイトからネット接続が速くなるということで下記のものを取り込みました。レジストリエディタでしたので結合し再起動したのは良いのですが、バックアップを取っておらず元に戻せません。 復元を実行しようとしたのですが、なぜか復元元ポイントが下記を取り込む以前のがなく戻せない状態です。 そのレジストリエディタをワードパットで開いてみたものが下記です Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] "TcpWindowSize"=dword:0003ecd0 "DefaultTTL"=dword:00000080 "SackOpts"=dword:00000001 "TcpMaxDupAcks"=dword:00000002 "Tcp1323Opts"=dword:00000001 "EnablePMTUBHDetect"=dword:00000000 "EnablePMTUDiscovery"=dword:00000001 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces] "MTU"=dword:000005dc [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters] "NetFailureCacheTime"=dword:00000000 "NegativeSOACacheTime"=dword:00000000 "NegativeCacheTime"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters] "LargeBufferSize"=dword:00004000 "MediumBufferSize"=dword:00000bc0 "SmallBufferSize"=dword:00000100 "TransmitWorker"=dword:00000020 "DefaultReceiveWindow"=dword:0003ecd0 "DefaultSendWindow"=dword:0003ecd0

  • .regファイルでTCP/IPの設定をしたい

    ノートパソコンの有線LANの設定を.regファイルで一発で復元できるようにしたいです。 ノートパソコンを他に持って行って有線LANの設定をよく変更するのですが、家に帰った際にプロパティを開いて手動で値を戻すのが手間なので、.regファイルを使用して設定を復元できるようにしようとしました。 しかし、DHCPの設定にしていたものを家のIPアドレス(固定)に.regファイルで戻すと、レジストリにはIPアドレスがきちんと設定されているにもかかわらず、通信ができません。 ネットワークのプロパティで確認してみると、IPが手動設定なのにIPアドレス、サブネットマスク、デフォルトゲートウェイが空欄のままになっています。 ファイルの内容は以下の通りです。 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces\{C180BDD5-399F-45D5-9272-47DB35994A57}] "EnableDHCP"=dword:00000000 "NameServer"="8.8.8.8,8.8.4.4" "IPAddress"=hex(7):31,00,30,00,2e,00,31,00,34,00,30,00,2e,00,32,00,30,00,2e,00,\ 31,00,36,00,37,00,00,00,00,00 "SubnetMask"=hex(7):32,00,35,00,35,00,2e,00,32,00,35,00,35,00,2e,00,30,00,2e,\ 00,30,00,00,00,00,00 "DefaultGateway"=hex(7):31,00,30,00,2e,00,31,00,34,00,30,00,2e,00,30,00,2e,00,\ 31,00,00,00,00,00 ちなみに、OSはWindows 7 Pro(64ビット)です。 レジストリの場所が間違っているのでしょうか?

  • TCP/IP通信(ソケット通信)について

    開発者新人です。 この度、TCP/IPのソケット通信を使ったWindowsアプリケーション開発(クライアント/サーバ)を 行います。 過去にシリアル通信の開発経験はありますが、ソケット通信の開発は初めてです。 そこでSEの皆さんにぜひご教示頂きたいのですが、設計をする上での 標準的な設計事等あると思いますが、どういう観点にて設計していきますでしょうか。 また、ソケット通信を行う際、コマンドフォーマットを決めるかと思います。 用途に応じて様々かも知れませんが、標準的なフォーマットはどういうものでしょうか。 (例) コマンドID、サイズ、データ部、サム。 シリアル通信のようにSEX、ETX等のヘッダは必要? 再送、タイムアウトの考え方等々。 変な質問内容になりましたが、宜しくお願いします。

  • 起動後すぐに自動再起動

    起動後すぐに自動再起動 OSを起動→パスワード入力→ログインするとDESKTOP画面が現れるのですが すぐに勝手に再起動されてしまいます。 再起動されてから→パスワード入力→ログインすると普通に使えます。 原因がわかりません。助けてください! 原因として思い当たる節はあります。 1、数日前、高速化の為レジストリをいじりました。   下記内容を適用しました。DWORD値が見当たらないものが2、3項目   あったので作成したのですが、それがあやしく思えます。   しかしどのDWORD値を作成したか思い出せないです。 ○「右クリックメニューの表示高速化」 HKEY_CURRENT_USER\Control Panel\desktop 文字列[MenuShowDelay]値[1] ○「現在使用していないDLLを終了」 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer DWORD値[AlwaysUnloadDLL]値[1] ○「青画面になった場合の自動再起動有効」 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl DWORD値[AutoReboot]値[1] ○「PCの動作効率の向上」 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\PriorityControl DWORD値[IRQ8Priority]値[1] ○「エクスプローラのプロセスを分離して高速化」 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer DWORD値[DesktopProcess]値[1] ○「ハードディスクのアクセスの負担を軽減」 HKEY_LOCAL_MACHINE\Software\Microsoft\Dfrg\BootOptimizeFunction 文字列[Enable]値[Y] ○「Windows MessengerとOutlook Explessの同時起動を無効」 HKEY_LOCAL_MACHINE\Software\Microsoft\OutlookExpless DWORD値[Hide Messenger]値[2] ○「ファイルの断片化を極力少なくする」 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem DWORD値[ContigFileAllocSize]値[1000] ○「シャットダウン時に仮想メモリを解放」 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management DWORD値[ClearPageFileAtShutdown]値[1] ○「Windowsカーネルのメモリを最適化」 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management DWORD値[DisablePagingExecutive]値[1] ○「DNSキャッシュを拡張」 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Service\Dnscache\Parameters DWORD値[MaxCacheEntryTtlLimit]値[93a80] ○「ネットワークなどからPCの情報を隠す」 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Service\lanmanserver\parameters DWORD値[hidden]値[1] ○「パケット情報の流入を阻止」 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Service\Tcpip DWORD値[SynAttackProtect]値[2] よろしくお願いします

  • TCP/IP通信に関する質問です。

    下記の3つのLinuxPCを使って、TCP/IPによるソケット通信のシステムを作成しました。 PC1: IP:192.168.0.1 Port: 20000 TCPサーバ PC2: IP:192.168.0.2 Port: 20000 TCPサーバ PC3: IP:192.168.0.3 Port:ランダム(クライアントなので) TCPクライアント PC3をクライアントとして、同じポート番号を持つアプリが動いている PC1とPC2に繋いで通信をする形です。 このシステムは問題なく動きました。 しかし、続いてPC1とPC2を一つのPCに(ハードウェアとして)まとめたくなったときに、 下記の条件があったとき、どのようにすれば良いでしょうか? 1. PC3のソフトウェアは一行も変更しない 2.りPC1とPC2が同一のハードウェアになっても、それぞれのソケットに流れるデータは変わらない 一台のコンピュータにおいて、一つのNICに複数のIPをふることはできましたが、 同じポート番号のソケットを作成するのはできないと思っています。 今のところ、一台のコンピュータで仮想マシンを二台立ち上げる方法を考えていますが、 それ以外に上手い方法はあるでしょうか? 非常に困っているため、ご回答よろしくお願いします。

  • TCP/IP通信プログラミングにおけるデータ送信タイミングと受信データ処理のタイミングについて

    現在Winsockを用いてTCP/IPメッセージ通信を行うプログラムを作成 しています。 メッセージはヌル文字区切りで送信され、ヌルが発見されると一つの メッセージの終わりということにしてあります。 このメッセージを時間ウェイトを入れずに連続して送信すると受信側で 正常にデータが受信できず、送信したデータの一部しか受信できません。 ある程度の時間ウェイトを入れてやることで正常に送受信できるように なります。 受信側の処理において、recvでデータを取得した後にメッセージパーズ 処理を入れているのですがそれほど重い処理でもありません。いろいろ 調べたのですが正常に送受信するときとしないときの違いが連続送信時 に入れる時間ウェイトにあるということしかわかっておりません。 これがTCP/IPの特性なのか私の開発環境(PC・ネットワーク)に起因する ものなのかがわかりません。どなたかこういった現象についてご経験を お持ちの方がおられましたらご教授願いたいと思っております。 以上

  • spybotで検出

    Spybotで検出されたものに、「Security Risks」とあって、+で折りたたまれて、2項目検出されました。 それは1つが 「設定HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Security Center\AntiVirusDisableNotify!=dword:0 もう1つが 「設定HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Security Center\FireWallDisableNotify!=dword:0 と出て、それぞれ右に「レジストリー変更」と出ていて、アイコンみたいな絵をクリックすると、レジストリの画面が開くようになっています。 果たしてこれはスパイウエアなのでしょうか?そして削除して良いものなのでしょうか?どなたか分かる方宜しくお願いします。        

  • TCP/IP通信の送信データについて

    TCP/IP通信の開発をしています。 開発はVS 2005 VB.net です。 送信データは下記の通りとなっていますが、BCCの算出方法が分かりません。 送信データ:[STX TEXT ETX BCCH BCCL CR] 制御文字は下記の通りです。 STX 02H(hex) テキストの開始 ETX 03H(hex) テキストの終了 BCC 水平パリティとして誤り検出に使用する CR 0DH(hex) キャリッジリターン ※1)BCCは、STXの後からETXの前までバイト単位でXORを行い、結果を上位と下位の4ビットに分け、それぞれASCIIに変換して上位下位の順で転送する。 ※2)BCC計算範囲はTEXT部です。 ※1)の部分を同コーディングすればよいか分かりません。 ご教授いただければと思います。

  • SYN Flood Attacks

    SYN Flood AttacksからPCを守るためのレジストリの情報が載っていました。 http://journal.mycom.co.jp/column/winxp/056/index.html HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters SynAttackProtect 値=2 というものです。 これと類似の情報で、 「パケット情報の流入を阻止する」 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Service\Tcpip DWORD値[SynAttackProtect]値[2] というものがありました。 http://www.a-windows.com/windowsxp/regedit.html レジストリのパスのServiceは、おそらくServicesの誤りだと思いますが、 さらに\Parametersを書き忘れているのであれば、同一の設定ということになります。 パケット情報の流入を阻止するという情報が誤りなのか それとも、共に設定した方がいいのでしょうか。 よろしくお願いします。 なお、ルーターおよびファイアーウォールを使用しておりますので あまり重要な設定ではないとは思うのですが、念のため設定したいです。