none
回傳與接收的設備訊息的問題 RRS feed

  • 一般討論

  • 各位大大你們好
    我想請問問題
    我現在有三個設備(測試用的)
    當三個設備都正常時 bytesReceived 的值為11
    但是 當我把其中一個設備拔掉時 那麼 bytesReceived 為0

    我用try catch把這段包起來 用debug逐筆執行
    執行到這裡  // 自已連線的伺服端接收資料
                int bytesReceived = clientSocket.Receive(bytes, 0, bytes.Length, SocketFlags.None); ====>為0
    就會直接跳出for迴圈,進入到timer1_Tick裡面不斷的重複執行
    listBox1.Items.Add(ex.ToString() + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + " - 背景作業執行中");
    其顯示字串為
    System.Exception: 已發生類型 'System.Exception' 的例外狀況。2012/09/10 16:51:01 - 背景作業執行中

    想請問各位大大這要如何避掉或者可用什麼方式解或避開


                                                                string str_b_address = dr2["b_address"].ToString();
                                                                if (str_crc_modbus_cmd_content.Substring(0, 2) == str_b_address || str_crc_modbus_cmd_content.Substring(2, 2) == read_func_code)
                                                                {
                                                                    // 設定接收資料緩衝區
                                                                    byte[] bytes = new Byte[1024];

                                                                    //MessageBox.Show(Convert.ToString(clientSocket.Receive(bytes, 0, bytes.Length, SocketFlags.None)));

                                                                    // 自已連線的伺服端接收資料
                                                                    int bytesReceived = clientSocket.Receive(bytes, 0, bytes.Length, SocketFlags.None);

                                                                    

                                                                    //IAsyncResult receiveAr = clientSocket.BeginReceive(bytes, 0, bytes.Length, SocketFlags.None, null, null);

                                                                    //int bytesReceived = clientSocket.EndReceive(receiveAr);

                                                                    if (bytesReceived > 0)
                                                                    {
    第二個問題 
    int bytesReceived = clientSocket.Receive(bytes, 0, bytes.Length, SocketFlags.None);
    這一段是同步接收的寫法
    但是我在傳送的動作是用非同步的寫法
    // 傳送資料至已連線的伺服端(非同步)
    clientSocket.BeginSend(msg, 0, msg.Length, SocketFlags.None, new AsyncCallback(SendCallback), clientSocket);
    混著用是否可行
    也麻煩大大不吝教導或告知
    非常謝謝各位大大

    風過留痕

    • 已變更類型 小朱MVP, Moderator 2012年9月11日 上午 10:20 發問者自行解決且未分享解決方法。
    2012年9月11日 上午 06:51

所有回覆