티스토리 툴바


Programming/C#.NET2012/01/08 17:27
C# 소켓 프로그래밍 방법이 다양한것 같지만
아래는 TcpListener 와 TcpClient 클래스를 이용한 간단한 방식의 예제다.

서버소스.
접속한 클라이언트에게 메세지를 10번 보낸다.
 
        using System.Net.Sockets;
        using System.Threading;

        private TcpListener client;

        public ServerForm()
        {
            InitializeComponent();
        }

        private void ServerForm_Load(object sender, EventArgs e)
        {
            // 클라이언트의 접속요청을 받는 스레드 시작
            Thread thr = new Thread(new ThreadStart(ListenerThread));
            thr.Start();
        }

        public void ListenerThread()
        {
            client = new TcpListener(12345);
            client.Start();

            while (true)
            {
                // 클라이언트의 연결 요청 확인
                while (!client.Pending())
                {
                    Thread.Sleep(100);
                }

                // 클라이언트와의 통신처리 스레드 시작
                ConnectionHandler newConnection = new ConnectionHandler();
                newConnection.threadListener = this.client;
                Thread newThread = new Thread(new ThreadStart(newConnection.clientHandler));
                newThread.Start();
            }
        }
    }

    public class ConnectionHandler
    {
        public TcpListener threadListener;

        public void clientHandler()
        {
            TcpClient client = threadListener.AcceptTcpClient();
            NetworkStream ns = client.GetStream();

            string msg = "Welcome to server\n";

            byte[] send = Encoding.ASCII.GetBytes(msg);

            for (int i = 0; i < 10; i++)
            {
                ns.Write(send, 0, send.Length);
                Thread.Sleep(1000);
            }
        }
    }

클라이언트 소스.
서버에서 수신한 데이터를 리치 텍스트박스에 출력한다.
    using System.Net.Sockets;
    using System.Threading;

    public partial class Form1 : Form
    {
        private TcpClient server;
        private NetworkStream ns;
        private bool isRunning = true;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                server = new TcpClient("127.0.0.1", 12345);
                ns = server.GetStream();
                Thread recvThread = new Thread(new ThreadStart(RecvThread));
                recvThread.Start();
            }
            catch (SocketException)
            {
                MessageBox.Show("서버와의 연결에 실패했습니다.");
            }
        }

        delegate void LogToForm(string msg);
        private void Log(string msg)
        {
            serverMessage.AppendText(msg);
            serverMessage.ScrollToCaret();
        }

        public void RecvThread()
        {
            byte[] buffer = new byte[1024];
            string msg;

            while (isRunning)
            {
                try
                {
                    ns.Read(buffer, 0, buffer.Length);
                    msg = Encoding.ASCII.GetString(buffer);
                    serverMessage.Invoke(new LogToForm(Log), new object[] { msg });
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            isRunning = false;

            ns.Close();
            server.Close();
        }
    }


이건 원리를 정리해두는 정도의 허접한 소스니
이정도로 정리해두자. 
Posted by jjin865
Programming/C#.NET2012/01/06 23:56
텍스트박스 에디트에 숫자만 입력하길 원할경우

1. KeyPress 이벤트를 텍스트박스에 추가한다.

2. KeyPress 이벤트를 아래와 같은 방식으로 작성한다.



private void textDistance_KeyPress(object sender, KeyPressEventArgs e)
{
if (Char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToInt32(Keys.Back))
{
}
else
{
e.Handled = true;
MessageBox.Show("숫자만 입력하실 수 있습니다.");
}
}


위 코드는 숫자와 백스페이스를 제외한 다른 입력을 제한하는 방식이다.  
Posted by jjin865
궁시렁궁시렁...2008/05/27 18:27




간결하고 냉정한 인공지능 로봇 취향

메마르고 독창적인. 당신은 전통적인 엔지니어의 취향입니다.

당신은 인과관계가 깔끔한 것을 좋아하는 취향입니다. "그래서? 그게 왜 그렇게 됐는데?"라는 생각을 자주 하는 편이죠. 마치 if-then 구문이 골수 깊이 박힌 엔지니어와 같다고나 할까요. 질서정연하지 않은, 장황한 감정에 의존하는 순정 만화 영화 소설은 당신이 좀처럼 가까이 하기가 힘들 겁니다.


"공각 기동대"의 주인공 쿠사나기 소령.
임무 달성의 효율성을 극대화하기 위해 만들어진 기계 군인.
쿠사나기 소령의 철두철미함과 냉혹한 결단력은 당신 취향의 이상형입니다.

당신은 너무 흔하고 뻔한 것에 쉽게 싫증내는 비주류 지향입니다. 매일 똑같은 광경이 펼쳐지는 멜로 드라마, 매일 똑같이 성형한 연예인들이 나오는 TV 광고, 매일 똑같은 멜로디와 창법의 발라드 노래, 당신에겐 모두 짜증나는 것들입니다. 도대체 이런 똑같은 것들을 지겨워 하지도 않고 즐겨 보는 사람들은 제정신일까 궁금합니다.

현실 세계에선 '까다로운' 비주류일지 모르지만, 인터넷 시대에 당신 같은 부류는 주류가 될 수 있습니다. 지루하고 개념없는 대중에 반항적인, 현실에 불만 가득한 사람끼리 모여 영향력을 발휘하고, 무개념 인간들을 조롱할 수 있을테니까요.


좋아하는 것
간 결하고 논리적이고 특이한 것이 좋습니다. 딱 부러지게 예를 들자면 SF 소설이죠. 물론 SF 소설 싫어할 수도 있습니다. SF 소설의 상당수는 장황하게 길기만 하니까요. 취향이 상당히 특이하다는 말을 들을 수도 있지만, 의외로 대중적인 영화 소설 음악에 끌리기도 합니다.

사실 이렇게 보면, 특별히 당신의 취향에 시금석 같은 기준이 있는 것은 아닙니다. 일단은 뭔가 새롭고 독창적일 것, 그러나 당신이 아는 상식과 논리에 벗어나지 않을 것. 이 정도 조건이면 당신이 좋아하는 것에 근접할 수 있을 겁니다. 가령, 다음과 같은 광고 정도면 괜찮을까요?


저주하는 것
비논리, 비이성, 군중심리, 이유도 묻지 않는 따라쟁이들, 오빠부대. 당신이 저주하는 것들입니다. 물론 당신 취향만 특별히 저주하는 것은 아닐테지만 말이죠.

사실 당신은 특별히 어떤 취향을 혐오하거나 멸시하지 않는 편입니다. 저주도 관심이 있어야 하는데, 당신은 남들이 뭘 좋아하는지에 크게 관심이 없거든요. 남들이 뭘 하던 당신은 기본적으로 무관심한 편입니다. 문제는 남들이 관심없는 취향을 당신에게 들이밀 때죠. 상호존중의 원칙만 지켜진다면 당신은

Posted by jjin865