티스토리 뷰

DB에 데이터가 있는 상태에서 C#으로 서버와 클라이언트를 만들고

서버는 DB와 클라이언트 연결.

클라이언트는 서버와 연결해서 원하는 값을 서버를 통해서 DB로 부터 가져오기.

DB에는 name과 tel 이라는 Column을 가지고 있으며 여러개의 Rows를 가지고 있는 상태.

클라이언트에서는 textBox1에 name을 입력하면 textBox2에 name에 해당하는 tel 값을 가지고 온다.

서버에서는 연결 소켓을 만들어 이것을 쓰레드로 돌린다. 쓰레드로 돌리면서 클라이언트로부터

Stream이 전송되면 Check()함수로 DB에서 원하는 값을 검색한다.

클라이언트도 마찬가지로 서버 연결 소켓을 쓰레드로 만들어 아예 생성자로부터 쓰레드를 실행시키게끔 하였다.

 

*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 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;
                }

                Thread 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(5);

            Check();
        }

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

                NetworkStream stream = new NetworkStream(ClientSocket);
                StreamReader reader = new StreamReader(stream);
                StreamWriter 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();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

        }

       
    }
}

 

 

 

*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;
        public Form1()
        {
            InitializeComponent();
            connect();
        }


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

        private void connect()
        {
            try
            {
                ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint ep = new IPEndPoint(IPAddress.Loopback, 35000);
                ClientSocket.Connect(ep);
            }
            catch (Exception ex) {
                MessageBox.Show(ex.ToString());
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                NetworkStream stream = new NetworkStream(ClientSocket);
                StreamReader reader = new StreamReader(stream);
                StreamWriter 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());
            }

        }
    }
}

 

공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함