解决方案 »

  1.   

    不太清楚,,TCP我一直都没用心跳...但是一直都可以用 我也不知道为什么..我都是硬着头皮开发.. 上位机跟硬件通讯 就是他连我 我给他发 他给我发没有什么心跳的
    而且你的心跳的方法  不就是发送数据嘛.....
    client.BeginSend(bytes, 0, bytes.Length, SocketFlags.None, new AsyncCallback(BeginSendDataCallBack), client);
    client.BeginSend(bytes, 0, bytes.Length, SocketFlags.None, new AsyncCallback(BeginHeartbeatCallBack), client);
    你看 我截的来自发送数据以及心跳方法内的东西 都一样的. 所以 你这感觉没什么用
      

  2.   


    异步就是一个动作是异步的,跟“发送还是接收”没有直接关系。你原来是什么流程,异步操作之后仍让还是什么流程。例如你原来是发送消息之后接收消息,那么改为BeginSend之后你在EndSend时开始BeginReceive,也就仍然是先发后收。而如果你原来是并行地进行Receive和Send,那么改为异步之后也还是一样。异步本来就是封装好的子线程操作,用不着你再多写任何代码。如果你觉得自己写的子线程发送心跳的代码比.net的异步操作更简单更好,那么就用你自己的好了。
      

  3.   


    异步就是一个动作是异步的,跟“发送还是接收”没有直接关系。你原来是什么流程,异步操作之后仍让还是什么流程。例如你原来是发送消息之后接收消息,那么改为BeginSend之后你在EndSend时开始BeginReceive,也就仍然是先发后收。而如果你原来是并行地进行Receive和Send,那么改为异步之后也还是一样。异步本来就是封装好的子线程操作,用不着你再多写任何代码。如果你觉得自己写的子线程发送心跳的代码比.net的异步操作更简单更好,那么就用你自己的好了。也就是说socket异步操作的话,不存在端口被谁谁占用的情况哇?能同时的进行Receive和Send?我就想要这效果,3Q
      

  4.   

    我得再去查查端口被占用是什么概念了,socket send receive能同时进行,那就是能同时进去和出来,哎,抽时间买本书看看
      

  5.   

    异步处理是对的,但 这里的心跳就没必要了。与上面的那个BeginSendData重复了, 心跳不是这样子的 心跳的定义是发送一个封装好的数据包 比如发送个 1 0 什么的  #region 心跳
            public void Heartbeat(byte[] bytes)
            {
                client.BeginSend(bytes, 0, bytes.Length, SocketFlags.None, new AsyncCallback(BeginHeartbeatCallBack), client);
            }
     
            private void BeginHeartbeatCallBack(IAsyncResult ar)
            {
                Socket tCleint = ar as Socket;
                tCleint.EndSend(ar);
            }
            #endregion