- - PR -
PDAからPCへのsocket通信遅延について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-04-11 16:09
お世話になります。
[環境] 言語:VB.NET / Visual Studio 2005 / Windows XP VB2005にて、PDA(クライアント)からPC(サーバ)へsocket通信を行うプログラムを作っています。 クライアントから"111"などの簡易な数値データを送り、瞬時にサーバーへデータを送りたいのですが、25秒たった後にサーバ側でクライアントからの接続を読み取ってしまいます。 PDA(クライアント)からPC(サーバ)へデータを瞬時に送る方法がございましたらご教授下さい。 25秒待たされるソース部分は下記します。 * PDAはWLANを使用していますが、約10Mbpsの通信を確保しています。 * PDAは .NET Compact Framework 2.0を使用し、PC側は.NET Framework 2.0を利用しています。 ----------------------------------- PDA側(クライアント)のソース ----------------------------------- '文字コードを指定する Dim enc As System.Text.Encoding = System.Text.Encoding.UTF8 'サーバーのホスト名とポート番号 Dim host As String = "xxx.xxx.xxx.xxx" Dim port As Integer = 8000 'TcpClientを作成し、サーバーと接続する Dim tcp As New System.Net.Sockets.TcpClient(host, port) '←ここで25秒待たされます 'NetworkStreamを取得する Dim ns As System.Net.Sockets.NetworkStream = tcp.GetStream() 'サーバーにデータを送信する '文字列をByte型配列に変換 Dim sendBytes As Byte() = enc.GetBytes("111") 'データを送信する ns.Write(sendBytes, 0, sendBytes.Length) '閉じる tcp.Close() ----------------------------------- vb初心者で行き詰ってしまい困っています。 ぜひよろしくお願いします。 [ メッセージ編集済み 編集者: mino 編集日時 2008-04-11 16:19 ] | ||||||||
|
投稿日時: 2008-04-11 16:22
サーバ側について一言も触れられていませんが、サーバは
何かプログラムで受信しているんでしょうか。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||||||
|
投稿日時: 2008-04-11 16:40
ご返答有難うございました。
申し訳ございません。サーバー側もVB.NET(.NET Framework 2.0) を利用して作成しています。サーバー側のソースは下記のとおりです。 ----------------------------------- PC側(サーバー)のソース ----------------------------------- '文字コードを指定する Dim enc As System.Text.Encoding = System.Text.Encoding.UTF8 'ローカルIPアドレスでListenを開始する Dim port As Integer = 8000 Dim listener As New System.Net.Sockets.TcpListener(port) listener.Start() Console.WriteLine(Dns.GetHostName() & " が Port{0}の Listen を開始しました。", port) '接続要求があったら受け入れる Dim tcp As System.Net.Sockets.TcpClient = listener.AcceptTcpClient() Console.WriteLine("クライアントが接続しました。") 'NetworkStreamを取得 Dim ns As System.Net.Sockets.NetworkStream = tcp.GetStream() 'クライアントから送られたデータを受信する Dim ms As New System.IO.MemoryStream Dim resBytes(256) As Byte Dim resSize As Integer Do 'データの一部を受信する resSize = ns.Read(resBytes, 0, resBytes.Length) 'Readが0を返した時はクライアントが切断したと判断 If resSize = 0 Then Console.WriteLine("クライアントが切断しました。") Console.ReadLine() Return End If '受信したデータを蓄積する ms.Write(resBytes, 0, resSize) Loop While ns.DataAvailable '受信したデータを文字列に変換 Dim resMsg As String = enc.GetString(ms.ToArray()) ms.Close() 'PDA(クライアント)からのデータを表示 Console.WriteLine(resMsg) '閉じる tcp.Close() Console.WriteLine("切断しました。") 'リスナを閉じる listener.Stop() Console.WriteLine("Listenerを閉じました。") Console.ReadLine() [ メッセージ編集済み 編集者: mino 編集日時 2008-04-11 16:46 ] | ||||||||
|
投稿日時: 2008-04-11 16:54
サーバー側は
ここできちんと待っているのですよね? で、
IP指定で開いているので、DNS解決に時間がかかっているわけではない。 とするとTCP接続に時間がかかっているわけです。 順番に考えていけば、つぎに気にするのは PDAのネットワークがきちんと初期化されているかどうか。 つぎに、WANを使っているということですから、 PDAとサーバーの間で初回だけ重い経路がないかどうか。 VPNであるとか、OnDemandな経路だと、初回に25秒はありえます。 そんなところでしょうか。 サーバー側も、PDA側も、突っ込みどころのあるプログラムですが、 25秒というのには関係ないと思います。 | ||||||||
|
投稿日時: 2008-04-11 18:10
>PDAとサーバーの間で初回だけ重い経路がないかどうか。
PDA本体のネットワークの設定を調べなおした所、ネットワークアダプタ設定のデフォルトゲートウェイの指定を192.168.xx.240と特殊な指定にしていたのを192.168.xx.1に変更した所、データを瞬時に読取る事が出来ました。 本当に有難うございました。 [ メッセージ編集済み 編集者: mino 編集日時 2008-04-11 18:13 ] |
1