C# 채팅 프로그램(Client 확장)
 


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.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;

namespace ChatClient
{
    public partial class MainForm : Form
    {
        TcpClient Client;   // 서버+클라이언트기능을 하기위해서
        StreamReader Reader; //스트림 값을 읽어오기 위해서
        StreamWriter Writer; //스트림 값을 쓰기위해서
        NetworkStream stream; //네트워크스트림 연결을 위해서
        Thread ReceiveThread; //멀티쓰레드를 위해서
        bool Connected;  // 연결상태확인

        private delegate void AddTextDelegate(string strText);

        public MainForm()
        {
            InitializeComponent();
        }

        private void MainForm_FormClosing(object sender, FormClosedEventArgs e) //종료버튼을 눌렀을때
        {
            Connected = false;

            if (Reader != null)
                Reader.Close();

            if (Writer != null)
                Writer.Close();

            if (Client != null)
                Client.Close();

            if (ReceiveThread != null)
                ReceiveThread.Abort();
        }

        private void SendBtn_Click(object sender, EventArgs e)
        {
            txtMessage.AppendText("이쪽 " + txtSend.Text + "\r\n"); // 이쪽 : 블라블라~
            Writer.WriteLine(txtSend.Text);  //작성한 글을 읽어서 씀 
            Writer.Flush();                  //전송하고 비움.

            txtSend.Clear(); // 글을 작성하는 부분 클리어
        }

        private void ConnectBtn_Click(object sender, EventArgs e)
        {
            if (txtIP.Text == "") //ip 않적고 눌르면
            {
                MessageBox.Show("서버IP 주소를 입력해 주세요", "", MessageBoxButtons.OK, MessageBoxIcon.Error); //에러 창 뜨게하기
            }1

            try
            {

                String IP = txtIP.Text; // ip쓰는 창에서 IP값 바다오기
                int port = 8080; //포트설정

                Client = new TcpClient();  //클라이언트 생성
                Client.Connect(IP, port);  //클라이언트 서버에 연결

                stream = Client.GetStream(); // 클라이언트의 스트림값 받아오기
                Connected = true; // 서버연결성공시 true
                txtMessage.AppendText("서버와 연결되었습니다" + "\r\n");

                Reader = new StreamReader(stream);  // 스트림값을 읽어드리기
                Writer = new StreamWriter(stream);  // 스트림값을 쓰기

                ReceiveThread = new Thread(new ThreadStart(Receive)); //클래스를 통해서 값을 받는다.
                ReceiveThread.Start(); // 값을 받는 스레드 실행
            }
            catch(Exception ConnE)
            {
                txtMessage.AppendText("서버에 연결할 수 없습니다." + "\r\n");
            }

        }

        private void Receive()
        {
            AddTextDelegate AddText = new AddTextDelegate(txtMessage.AppendText); // 메소드 등록

            try
            {

                while (Connected)
                {
                    Thread.Sleep(1); //Windows 시스템은 거의 정확한 sleep 시간을 보장한다. 즉, 1ms에 거의 유사한 sleep 시간을 제공한다.

                    if (stream.CanRead) // 스트림을 읽을 수 있다면...
                    {
                        string tempStr = Reader.ReadLine(); // 값을 일어와서

                        if (tempStr.Length > 0) // 문자 길이가 0이 아니라면
                        {
                            Invoke(AddText, "저쪽: " + tempStr + "\r\n"); // 출력
                            Panel_1.Text = "메시지도착시간: " + DateTime.Now; // 메시지도착시간 출력

                        }


                    }

                }

            }
            catch (Exception e)
            {

            }

        }

        private void MainForm_Load(object sender, EventArgs e)
        {

        }
    }
}



<완성>



참고자료
 

비주얼 C# 2005 익스프레스로 배우는 C# 2.0 프로그래밍 
MSDN http://msdn.microsoft.com/ko-kr/default.aspx  


'1. IT Story > Development' 카테고리의 다른 글

하노이타워  (0) 2012.03.28
이진찾기  (0) 2012.03.28
피보나치  (0) 2012.03.28
윈도우폰 게임개발 기초(WindowPhoneGame)  (0) 2012.03.07
C# 채팅 프로그램(Server 확장)  (4) 2012.03.07
C# 채팅 프로그램(Client)  (0) 2012.03.07
선택정렬응용  (0) 2012.03.07
이름정렬  (0) 2012.03.07
블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,


C# 채팅 프로그램(Server 확장)
 


채팅 서버와 클라이언트를 같이 가지고 있는 프로그램이다.

클라이언트와 서버에서 통신을 하기위해서 해당 IP주소와 포트번호를 일치 시켜주어야 한다.


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.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;

namespace ChatServer
{
    public partial class MainForm : Form
    {
        TcpListener Server; // 소켓 서버를 구현하기 위해서
        TcpClient Client;   // 서버+클라이언트기능을 하기위해서

        StreamReader Reader; //스트림 값을 읽어오기 위해서
        StreamWriter Writer; //스트림 값을 쓰기위해서

        NetworkStream stream; //네트워크스트림 연결을 위해서

        Thread ReceiveThread; //멀티쓰레드를 위해서

        bool Connected;  // 연결상태확인

        private delegate void AddTextDelegate(string strText); //Cross-Thread 호출을 실행하기 위해 사용함.

        public MainForm()
        {
            InitializeComponent();
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            Thread ListenThread = new Thread(new ThreadStart(Listen)); //서버를 시작함.
            ListenThread.Start();
        }

        private void SendBtn_Click(object sender, EventArgs e)
        {
            txtMessage.AppendText("이쪽 " + txtSend.Text + "\r\n"); // 이쪽 : 블라블라~
            Writer.WriteLine(txtSend.Text);  //작성한 글을 읽어서 씀 
            Writer.Flush();                  //전송하고 비움.
            txtSend.Clear(); // 글을 작성하는 부분 클리어
        }

        private void MainForm_formClosing(object sender, FormClosedEventArgs e) //종료버튼을 눌렀을때
        {
            Connected = false;

            if (Reader != null)
                Reader.Close();

            if (Writer != null)
                Writer.Close();

            if (Server != null)
                Server.Stop();

            if (Client != null)
                Client.Close();

            if (ReceiveThread != null)
                ReceiveThread.Abort();

        }

        private void Listen()
        {
            AddTextDelegate AddText = new AddTextDelegate(txtMessage.AppendText); // 메소드를 등록

            try {

                IPAddress addr = new IPAddress(0); //ip주소
                int port = 8080; //포트

                Server = new TcpListener(addr, port); //서버에 ip주소와 포트가져와서 서버실행

                Server.Start();  // 서버시작

                Invoke(AddText, "서버가 시작되었습니다..." + "\r\n");

                Client = Server.AcceptTcpClient(); //Client 수락

                Connected = true; // 연결됬음을 알리는..

                Invoke(AddText, "클라이언트와 연결되었습니다." + "\r\n");

                stream = Client.GetStream(); // 스트림을 통해서 Client값을 가져오기

                Reader = new StreamReader(stream);  // 스트림값을 읽어드리기
                Writer = new StreamWriter(stream);  // 스트림값을 쓰기

                ReceiveThread = new Thread(new ThreadStart(Receive)); //클래스를 통해서 값을 받는다.
                ReceiveThread.Start(); // 값을 받는 스레드 실행

            
            }
            catch(Exception e)
            {
            
            }
        }

        private void Receive()
        {
            AddTextDelegate AddText = new AddTextDelegate(txtMessage.AppendText); // 메소드 등록

            try
            {

                while (Connected)
                {
                    Thread.Sleep(1); //Windows 시스템은 거의 정확한 sleep 시간을 보장한다. 즉, 1ms에 거의 유사한 sleep 시간을 제공한다.

                    if (stream.CanRead) // 스트림을 읽을 수 있다면...
                    {
                        string tempStr = Reader.ReadLine(); // 값을 일어와서

                        if (tempStr.Length > 0) // 문자 길이가 0이 아니라면
                        {
                            Invoke(AddText, "저쪽: " + tempStr + "\r\n"); // 출력
                            Panel_1.Text = "메시지도착시간: " + DateTime.Now; // 메시지도착시간 출력

                        }


                    }

                }

            }
            catch (Exception e)
            {

            }

        }
    }
}


참고자료
비주얼 C# 2005 익스프레스로 배우는 C# 2.0 프로그래밍 
MSDN http://msdn.microsoft.com/ko-kr/default.aspx 


'1. IT Story > Development' 카테고리의 다른 글

이진찾기  (0) 2012.03.28
피보나치  (0) 2012.03.28
윈도우폰 게임개발 기초(WindowPhoneGame)  (0) 2012.03.07
C# 채팅 프로그램(Client 확장)  (0) 2012.03.07
C# 채팅 프로그램(Client)  (0) 2012.03.07
선택정렬응용  (0) 2012.03.07
이름정렬  (0) 2012.03.07
링크드리스트를 이용한 학생관리Pro  (0) 2012.03.07
블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,


C# 채팅 프로그램 만들기(Client)
 


C#을 이용하여 간단한 채팅프로그램을 만들어 보자.
채팅프로그램을 만드는 것을 통하여 간단한 소켓통신에 대해서 알아보고 활용해 보자.

채팅을 하기 위해서는 서버와 클라이언트가 필요하다. 


using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;


using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace Ex_chatClient
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            NetworkStream stream; 
            StreamReader Reader;

            TcpClient Client = new TcpClient();  //클라이언트 생성
            String DestIP= "localhost"; // 연결할 IP주소

            Client.Connect(DestIP, 8080); // IP 주소와 포트, 서버에 연결을 요청

            stream = Client.GetStream(); // NetWorkStream을 생성한 후 서버에서 보낸 데이터를 읽어들임
            
            Reader = new StreamReader(stream); //스트림으로 받아와서 

            string tempStr = Reader.ReadLine(); // 스트림 값을 읽어서

            txtReceive.AppendText(tempStr);  // tetReceive에 출력

            Client.Close(); //클라이언트 종료

        }
    }


참고자료
 

비주얼 C# 2005 익스프레스로 배우는 C# 2.0 프로그래밍 
MSDN http://msdn.microsoft.com/ko-kr/default.aspx 

'1. IT Story > Development' 카테고리의 다른 글

피보나치  (0) 2012.03.28
윈도우폰 게임개발 기초(WindowPhoneGame)  (0) 2012.03.07
C# 채팅 프로그램(Client 확장)  (0) 2012.03.07
C# 채팅 프로그램(Server 확장)  (4) 2012.03.07
선택정렬응용  (0) 2012.03.07
이름정렬  (0) 2012.03.07
링크드리스트를 이용한 학생관리Pro  (0) 2012.03.07
링크드리스트(Linked list)  (0) 2012.03.07
블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,


C# 채팅 프로그램(Server)
 


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;

using System.Net;

using System.Net.Sockets;

using System.Threading;


namespace Ex_chatserver

{

    public partial class MainForm : Form

    {


        private delegate void AddTextDelegate(String strText); // Cross-Thread 호출을 실행하기 위해사용


        public MainForm()

        {

            InitializeComponent();

        }


        private void Form1_Load(object sender, EventArgs e) //form1이 로드되면서 시작.

        {

            //서버를 시작

            Thread t1 = new Thread(new ThreadStart(StartListen));

            t1.Start();


        }

        


        private void StartListen()

        {

            IPAddress addr = new IPAddress(long.Parse("127.0.0.1")); //ip주소받기

            TcpListener Server = new TcpListener(addr, 8080);


            AddTextDelegate AddText = new AddTextDelegate(txtClient.AppendText);


            String MessageStr = "안녕하세요, 서버에서 보냅니다.";


            Server.Start();//연결요청 대기시작


            Invoke(AddText, "Listening을 시작합니다..\r\n");


            TcpClient Client = Server.AcceptTcpClient();//연결요청수락

            Invoke(AddText, "Client와 연결되었습니다..\r\n");


            NetworkStream stream = Client.GetStream();//NetWorkStream 얻기


            StreamWriter writer = new StreamWriter(stream);//메시지 보내기

            writer.WriteLine(MessageStr);

            writer.Flush();

            Invoke(AddText, "Client에 메시지를 보냈습니다..\r\n");


            Client.Close();//연결닫기

            Server.Stop();

            Invoke(AddText, "서버와 연결 종료..\r\n");


            //TcpListener는 Client의 요청에 귀기울(Listen)이고 있다가 Client가 연결을 요청해오면(Connect) Client의 연결요청을 수락(AcceptTcpClient)합니다.

            //여기까지 진행되고 나면 실제 데이터를 주고 받는 통신은 NetWorkStream을 통해서 이루어짐.

        }

       

    }

}



참고자료
 

비주얼 C# 2005 익스프레스로 배우는 C# 2.0 프로그래밍 
MSDN http://msdn.microsoft.com/ko-kr/default.aspx 


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,