UdpClient 作为客户端连接服务器

呜呜云 2013-01-25 12:42:32
UdpClient 作为客户端连接服务器时,我是用connect连接到指定的ip、port的时候,如果不向服务器发送数据,服务器下发数据的时候我收不到,为什么?
下面是代码,我是反复进行read的,不向服务器发数据,就收不到,请大虾们指点了。
  public bool read()
{
RecBuf = new byte[1024];
UdpState udpState = new UdpState();
udpState.MyudpClient = udpClient;
IAsyncResult ar = udpClient.BeginReceive(UdpReceiveCallback, udpState);
while (!ar.IsCompleted)
{
Thread.Sleep(100);
}
return true;
}

private void UdpReceiveCallback(IAsyncResult ar)
{
UdpClient d = (UdpClient)((UdpState)(ar.AsyncState)).MyudpClient;
IPEndPoint remote = (IPEndPoint)((UdpState)(ar.AsyncState)).IpEndPoint;
RecBuf = d.EndReceive(ar, ref remote);
RecBufNum = RecBuf.Length;
}
...全文
138 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
呜呜云 2013-01-28
  • 打赏
  • 举报
回复
引用 6 楼 wolf_y 的回复:
是不是连接完成一次发送/接收 就关闭了。。
while (true)
            {
                try
                {
                    if (Tcli.IsOnline)
                    {
                        if (Tcli.read())
                        {
                            ProcRead = Tcli.RecBuf;
                            ProcReadNum = Tcli.RecBufNum;
                            thisEventSocketLog(ProcReadNum.ToString());
                        }
                    }
                    else if (Ucli.IsOnline)
                    {
                        if (Ucli.read())
                        {
                            ProcRead = Ucli.RecBuf;
                            ProcReadNum = Ucli.RecBufNum;
                            thisEventSocketLog(ProcReadNum.ToString());
                        }
                    }
                }
我这是一个线程,线程是个read的死循环,怎么会就一次呢。而且我断点看了,他就是没收到。
lugang386 2013-01-28
  • 打赏
  • 举报
回复
从代码上看,你只接收了一次
狼烟辉 2013-01-28
  • 打赏
  • 举报
回复
是不是连接完成一次发送/接收 就关闭了。。
呜呜云 2013-01-28
  • 打赏
  • 举报
回复
引用 2 楼 catchdream 的回复:
你把代码贴全,是不是udpClient的初始化那部分的问题,或者循环Read 部分也贴出来看看
        UdpClient udpClient;
        public UClient()
        {
            udpClient = new UdpClient();
        }

        public bool Open()
        {
            try
            {
                udpClient.Connect(this.Ip, this.Port);
            }
            catch (Exception)
            {
                return false;
            }
            IsOnline = true;
            return true;
        }
这是初始化部分,他们写在一个类里面,链接的地址使用的是TCP UDP Socke调试工具,在本机端口调试的
  • 打赏
  • 举报
回复
你把两个机器的ip和端口贴出来!
strife013 2013-01-25
  • 打赏
  • 举报
回复
搞不清楚,可能是你的连接没有建立吧
catchdream 2013-01-25
  • 打赏
  • 举报
回复
你把代码贴全,是不是udpClient的初始化那部分的问题,或者循环Read 部分也贴出来看看

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧