Socket客户端持续监听服务器端发来的消息

发布于 2022-09-01 05:58:53 字数 1833 浏览 7 评论 0

最近搞一个WP8的小程序,要用到TCP通信,但是发现WP的.net framework库里边就只让用Socket。无奈客户端这边就只能用Socket来做。

但是现在有一个问题就是我找了一些资料,都是写服务器端持续监听客户端的消息。但是这边有个需求就是客户端要持续监听服务器端发来的消息,然后进行处理。

我自己实现了客户端的receive 方法。单独调用是没问题的。但是我想开启一个线程,然后循环调用receive方法,发现只有第一次能receive到,以后都是超时。

附上这个receive的代码,其实就是网上一个现成的例子。

public string Receive()
        {
            string response = "Operation Timeout";

            if (_socket != null)
            {
                // Create SocketAsyncEventArgs context object
                SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
                socketEventArg.RemoteEndPoint = _socket.RemoteEndPoint;

                socketEventArg.SetBuffer(new Byte[MAX_BUFFER_SIZE], 0, MAX_BUFFER_SIZE);

                socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e)
                {
                    if (e.SocketError == SocketError.Success)
                    {
                        response = Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred);
                        response = response.Trim('\0');
                    }
                    else
                    {
                        response = e.SocketError.ToString();
                    }

                    _clientDone.Set();
                });

                _clientDone.Reset();

                _socket.ReceiveAsync(socketEventArg);

                _clientDone.WaitOne(TIMEOUT_MILLISECONDS);
            }
            else
            {
                response = "Socket is not initialized";
            }

            return response;
        }

主要就是想搞清楚:

  1. 是不是Socket本来就不允许客户端一直监听,只能在需要的时候Receive一下?
  2. 这个持续监听的需求大概应该怎么解决?
  3. 我这个开线程while(true)监听的做法可不可取的?

谢谢大大~~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文