티스토리 뷰

전에꺼 수정본..

서버에 소켓이 열려있어야 클라이언트에서 접속 가능..

서버에서 소켓이 열려있지 않았을 때 클라이언트에서 연결 시도 할 경우의 에러 처리 구문 아직 없음.

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

namespace ServerTest
{

    public partial class Form1 : Form
    {
        private Socket ServerSocket;
        private Socket ClientSocket;
        private NetworkStream stream;
        private StreamReader reader = null;
        private StreamWriter writer = null;
        private Thread ServerThread;

        private SqlCommand Comm;
        private string qry = "SELECT tel FROM solever1 WHERE name = @readBuf";
        private Serverdll con;

        public Form1()
        {

            InitializeComponent();
            //Socket ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            con = new Serverdll();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {

                if (ServerSocket != null)
                {
                    MessageBox.Show("현재 서버 가동중");
                    return;
                }

                ServerThread = new Thread(new ThreadStart(thread_run));
                ServerThread.IsBackground = true;
                ServerThread.Start();
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

        }

        public void thread_run()
        {
            ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint ep = new IPEndPoint(IPAddress.Loopback, 35000);
            ServerSocket.Bind(ep);
            ServerSocket.Listen(10);

            Check();
        }

        public void Check()
        {
            try
            {
                ClientSocket = ServerSocket.Accept();

                stream = new NetworkStream(ClientSocket);
                reader = new StreamReader(stream);
                writer = new StreamWriter(stream);
                while (true)
                {
                    string readBuf = reader.ReadLine();

                    if (readBuf != null && readBuf.Length > 0)
                    {
                        Comm = new SqlCommand(qry, con.returnCon());
                        Comm.Parameters.Add("@readBuf", SqlDbType.VarChar, 12);
                        Comm.Parameters["@readBuf"].Value = readBuf;

                        SqlDataReader sdr = Comm.ExecuteReader();

                        while (sdr.Read())
                        {
                            writer.WriteLine(sdr.GetString(0));
                            writer.Flush();
                        }

                        sdr.Close();
                    }
                    else
                        return;
                       
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (writer != null)
                writer.Close();
            if (reader != null)
                reader.Close();
            if (ClientSocket != null)
                ClientSocket.Close();
            if (ServerSocket != null)
            {
                ServerSocket.Close();
                ServerThread.Abort();
            }
              
        }

    }
}

 

*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 ClientTest
{
    public partial class Form1 : Form
    {
        private Socket ClientSocket;
        private Thread ClientThread;
        private NetworkStream stream;
        private StreamReader reader = null;
        private StreamWriter writer = null;
              

        public Form1()
        {
            InitializeComponent();
        }


        /*public void thread()
        {
            Thread ClientThread = new Thread(new ThreadStart(thread_run));
            ClientThread.IsBackground = true;
            ClientThread.Start();
        }*/

        private void connect()
        {
                ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint ep = new IPEndPoint(IPAddress.Loopback, 35000);
                ClientSocket.Connect(ep);
          
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                stream = new NetworkStream(ClientSocket);
                reader = new StreamReader(stream);
                writer = new StreamWriter(stream);

                string writeBuf = textBox1.Text;
                writer.WriteLine(writeBuf);
                writer.Flush();

                string readBuf = reader.ReadLine();
                textBox2.Text = readBuf;

                reader.Close();
                writer.Close();
                stream.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                if (ClientSocket != null)
                {
                    MessageBox.Show("현재 연결중");
                    return;
                }

                ClientThread = new Thread(new ThreadStart(connect));
                ClientThread.IsBackground = true;
                ClientThread.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (writer != null)
                writer.Close();
            if (reader != null)
                reader.Close();
            if (ClientSocket != null)
                ClientSocket.Close();
            if (ClientSocket != null)
            {
                ClientSocket.Close();
                ClientThread.Abort();
            }
        }
    }
}

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함