private void DataReceived(IAsyncResult ar)
        {
            // BeginReceive에서 추가적으로 넘어온 데이터를 AsyncObject 형식으로 변환한다.

            AsyncObject obj    = (AsyncObject)ar.AsyncState;
            Socket      server = obj.workingSocket;
            int         received;

            try
            {
                // 데이터 수신을 끝낸다.
                received = server.EndReceive(ar);
                //Console.WriteLine("received : "+received);
            }
            catch
            {
                server.Close();
                return;
            }
            // 받을 데이터가 있다.
            if (received <= 0)
            {
                obj.workingSocket.Close();
                return;
            }

            if (received > 0)
            {
                string text = Encoding.UTF8.GetString(obj.buffer);
                obj.sb.Append(text);
                //Console.WriteLine("sb 내용" + obj.sb.ToString());
                if (server.Available == 0)//네트워크상에 받을 데이터가 없다.
                {
                    //Console.WriteLine("수신 종료");
                    string receiveData = obj.sb.ToString();
                    obj.sb.Clear();                                //이어가던 내용 초기화(메시지 끝이므로)
                    int      counting = 0;
                    string[] tokens   = receiveData.Split('\x01'); // 버퍼 공백부분 삭제
                    for (int msgNum = 0; msgNum < tokens.Length; msgNum++)
                    {
                        if (!tokens[msgNum].Equals("") && tokens[msgNum][0] != '\0')
                        {
                            counting++;
                            makeStatedata.MakeDataSet(tokens[msgNum]);
                        }
                    }
                    //Console.Write(counting);
                }
                obj.ClearBuffer();//버퍼 비우기
            }
            // 받은 데이터가 없으면(연결끊어짐) 끝낸다.
            server.BeginReceive(obj.buffer, 0, 2048, 0, DataReceived, obj);
        }
Beispiel #2
0
        static clientsocketHandler()
        {
            try
            {
                string address = "localhost";                                                          // "127.0.0.1" 도 가능
                int    port    = 2233;
                mainSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); // 소켓 초기화
                mainSock.Connect("192.168.190.236", port);
            }
            catch
            {
                MessageBox.Show("서버가 실행되지 않고 있습니다!", "에러", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                System.Environment.Exit(1);
            }
            AsyncObject ao = new AsyncObject(4096);

            ao.WorkingSocket = mainSock;
            mainSock.BeginReceive(ao.Buffer, 0, ao.BufferSize, 0, DataReceived, ao);
        }
        public ClientSocketHandler()
        {
            try
            {
                string address = "192.168.190.234";                                                    // "127.0.0.1" 도 가능
                int    port    = 2233;
                mainSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); // 소켓 초기화
                mainSock.Connect(address, port);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "에러", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                System.Environment.Exit(1);
            }
            Console.WriteLine("소켓연결 성공");
            AsyncObject ao = new AsyncObject();

            ao.workingSocket = mainSock;
            mainSock.BeginReceive(ao.buffer, 0, 2048, 0, DataReceived, ao);
        }
Beispiel #4
0
        static void DataReceived(IAsyncResult ar)
        {
            // BeginReceive에서 추가적으로 넘어온 데이터를 AsyncObject 형식으로 변환한다.
            AsyncObject obj = (AsyncObject)ar.AsyncState;

            // 데이터 수신을 끝낸다.
            int received = obj.WorkingSocket.EndReceive(ar);

            // 받은 데이터가 없으면(연결끊어짐) 끝낸다.
            if (received <= 0)
            {
                obj.WorkingSocket.Close();
                return;
            }

            // UTF8 인코더를 사용하여 바이트 배열을 문자열로 변환한다.
            string text = Encoding.UTF8.GetString(obj.Buffer);

            // 0x01 기준으로 짜른다.
            // tokens[0] - 보낸 사람 IP
            // tokens[1] - 보낸 메세지
            string[] tokens = text.Split('\x01');
            string   ip     = tokens[0];
            string   msg    = tokens[1];

            // 클라이언트에선 데이터를 전달해줄 필요가 없으므로 바로 수신 대기한다.
            // 데이터를 받은 후엔 다시 버퍼를 비워주고 같은 방법으로 수신을 대기한다.
            string[] msgs = msg.Split(';');

            if (msgs[0].Equals("success"))
            {
                socket_event("success");
            }
            obj.ClearBuffer();

            // 수신 대기
            obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj);
        }