C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

TCPの受信

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■90743 / inTopicNo.1)  TCPの受信
  
□投稿者/ てるてる (1回)-(2019/04/15(Mon) 18:01:51)

分類:[C#] 

こんにちは。
以下のように、スレッドでTCPのコマンドを受信するタスクを実装しようと考えています。
うまくTCPでコマンドを受信できないのですが、アドバイスをいただけますと幸いです。

事象:
cmdRecieve内のif (server.Pending())をコメントアウトすると、うまくコマンドの受信ができる。
ただし、コマンドがこないと、client = server.AcceptTcpClient();で永久待ちになってしまう。

if (server.Pending())をコメントアウトしなければ、永久待ちはなくなる。
ただし、他のアプリからコマンドを送信すると、うまく受信してくれない。


以上、よろしくお願いいたします。


     /*
         * Command Thread
         */
        private void cmdThread()
        {
            byte[] buf = new byte[40];

            while (true)
            {
                // バッファ初期化
                Array.Clear(buf, 0, buf.Length);

                // データ受信
                if (!cmdReceive(buf, buf.Length))
                {
                    Thread.Sleep(100);
                    continue;
                }

                // コマンドキューに追加
                que.TryAdd(buf, 1000);

                Thread.Sleep(100);
            }
        }

        /*
         * コマンド受信モジュール
         */
        public bool cmdReceive(byte[] buf, int bufSize)
        {
            TcpClient client = new TcpClient();

            try
            {
                //サーバーを開始
                Int32 port = cmdPort;
                IPAddress localAddr = ipAddr;
                server = new TcpListener(localAddr, port);

                // サーバー開始
                server.Start();

                // 接続待ちがあるか判断
                //if (server.Pending())
                //{
                    // 接続
                    client = server.AcceptTcpClient();

                    // サーバー終了
                    server.Stop();
               // }
                /*else
                {
                    // サーバー終了
                    server.Stop();
                }*/

                if (client.Connected)
                {
                    //メッセージを受信
                    NetworkStream stream = client.GetStream();
                    stream.Read(buf, 0, bufSize);

                    // 接続終了
                    client.Close();

                    return true;
                }
            }
            catch (SocketException e)
            {
                MessageBox.Show(e.Message);
            }

            return false;
        }

引用返信 編集キー/
■90744 / inTopicNo.2)  Re[1]: TCPの受信
□投稿者/ shu (1175回)-(2019/04/15(Mon) 18:08:10)
No90743 (てるてる さん) に返信

どぼんさんの『CPを利用した複数クライアント接続可能なチャットアプリケーションを作る』が参考になると思います。

http://dobon.net/vb/dotnet/internet/
http://dobon.net/vb/dotnet/internet/tcpchat.html
引用返信 編集キー/
■90746 / inTopicNo.3)  Re[2]: TCPの受信
□投稿者/ ????? (5回)-(2019/04/17(Wed) 09:36:59)
shuさん、

さっそくのアドバイスありがとうございました。
いただいたリンク先を参考にして、実装することができました。
ありがとうございました。

No90744 (shu さん) に返信
> ■No90743 (てるてる さん) に返信
>
> どぼんさんの『CPを利用した複数クライアント接続可能なチャットアプリケーションを作る』が参考になると思います。
>
> http://dobon.net/vb/dotnet/internet/
> http://dobon.net/vb/dotnet/internet/tcpchat.html
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ