항상 tcp 클라이언트 만들때마다 코딩하려니깐 너무 너무 귀찮아서..
그냥 이거를 빼대로 만들려고 올립니다.
코드가 잘짜여졌거나 좋은건지는 전혀 모르겠고요..
필요할때 가져가서 고쳐서 쓸려고 합니다...


    class Network
    {
        private Socket sock;
        private MainApp app;
        private Thread NetworkThread;
        private delegate void ExceptionCallback(string msg);
        public Network(MainApp app)
        {
            this.app = app;

        }

        public bool Connect()
        {
            bool isConnect = true;
            if (sock != null) sock.Close();
            sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            while (true)
            {
                try
                {
                    IPAddress svrIp = IPAddress.Parse("127.0.0.1");
                    IPEndPoint ipep = new IPEndPoint(svrIp, 9507);
                    sock.Connect(ipep);
                    if (sock.Connected)
                    {
                        isConnect = true;
                        break;
                    }
                }
                catch (SocketException ex)
                {
                    isConnect = false;
                    app.ExceptionWrite("서버와 연결을 실패. 재접속 실행함.");
                }
            }
            app.ExceptionWrite("서버와 연결 됨.");
            return isConnect;
        }

        public void Receive()
        {
            while (true)
            {
                Thread.Sleep(500);
                byte[] data = new byte[2048];
                try
                {
                    long startTicks = DateTime.Now.Ticks;
                    int size = sock.Receive(data);

                    if (size <= 0) { Connect(); }
                    else app.ConvertData(Encoding.Default.GetString(data, 0, size));

                    TimeSpan workticks = new TimeSpan(DateTime.Now.Ticks - startTicks);
                    app.ExceptionWrite("서버로부터 받은 데이터 : " + size + "Byte / 걸린시간 : " + workticks.TotalSeconds + "초");
                }
                catch (SocketException ex)
                {
                    app.ExceptionWrite(ex.Message);
                    Connect();
                }
            }
        }

        public void ThreadStart()
        {
            NetworkThread = new Thread(new ThreadStart(Receive));
            NetworkThread.Start();
        }

        public void ThreadAbort()
        {
            if (NetworkThread != null) NetworkThread.Abort();
            if (sock.Connected) sock.Close();
        }
    }
Posted by 아르다