기본 콘텐츠로 건너뛰기

C# - Server Socket - ReadCallback(IAsyncResult ar)

public void ReadCallback(IAsyncResult ar)
        {
            string content = string.Empty;
            Socket handler = null;
            try
            {
                StateObject state = ar.AsyncState as StateObject;
                handler = state.workSocket;

                int bytesRead = handler.EndReceive(ar);

                if (bytesRead > 0)
                {
                    string receive_data = (Encoding.ASCII.GetString(state.buffer, 0, bytesRead));
                    irocv.IROCV_Recv(receive_data);

                    byte[] bytes = irocv.IROCV_DATA;
                    string send_data = (Encoding.ASCII.GetString(bytes, 0, bytes.Length));
                    handler.Send(bytes);
                    Invoke((MethodInvoker)delegate
                    {
                        lbMSG_PC.Items.Add("Recv => " + receive_data);
                        if (lbMSG_PC.Items.Count > 50)
                            lbMSG_PC.Items.Clear();

                        lbMsg_IROCV.Items.Add("Send => " + send_data);
                        if (lbMsg_IROCV.Items.Count > 50)
                            lbMsg_IROCV.Items.Clear();
                    });

                    // Not all data received. Get more.  *** 반드시 필요한 코드 ***
                    handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
                    new AsyncCallback(ReadCallback), state);
                }
            }
            catch (Exception ex)
            {
                handler.Close();
                handler.Dispose();
            }
        }

댓글

이 블로그의 인기 게시물

C# - Windows Form 에 있는 control 찾기

// 아래 코드는 form 의 최상위 control만 찾을 수 있음. // panle, groubbox ... 내부에 있는 control은 찾지 못함. Control GetControlByName(string Name) {     foreach (Control c in this.Controls)         if (c.Name == Name)             return c;     return null; } // form 의 모든 control을 찾을 수 있음. string name = "btnBit" + (i + 1).ToString("D2"); var tmpBtn = this.Controls.Find(name, true).FirstOrDefault(); if (tmpBtn != null) {     if (value == 1) tmpBtn.BackColor = Color.Lime;     else tmpBtn.BackColor = Color.Gray; }

C# - Serial Port ASCII/HEX Format

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; namespace SerialTest1 {     public partial class Form1 : Form     {         delegate void MyDelegate();      //델리게이트 선언(크로스 쓰레드 해결하기 위한 용도)         bool SendForamt = true;          // true : ASCII   false : HEX         bool ReceiveFormat = true;       // true : ASCII   false : HEX         public Form1()         {             InitializeComponent();          ...