Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Cách kiểm soát kết nối trên lập trình client/sever

  1. #1
    Ngày gia nhập
    05 2007
    Bài viết
    13

    Unhappy Cách kiểm soát kết nối trên lập trình client/sever

    Các bạn ơi giúp mình với! Mình viết 1 chương trình client/sever. Mình dùng đến hàm thread.sleep() trong vòng while khi mà mạng còn kết nối thì thực hiện gửi nhận dữ liệu giữa hai máy. Vấn đề là khi đang chạy thì không sao nếu như mình tắt đột xuất một trong hai chương trình thì báo lỗi. Đây là code cúa mình mong các bạn gỡ rối giúp mình với. Cảm ơn nhiều.
    Chương trình server:

    Code:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    using System.Net.Sockets;
    using System.Windows.Forms;
    using System.Threading;
    
    namespace QuanSatServerNew
    {
        class KetNoi
        {
            public Socket socket;
            public Socket client;
            byte[] strnhan;
    
            public void MoKetNoi()
            {
                IPEndPoint IP_End = new IPEndPoint(IPAddress.Any, 5000);
                socket = new Socket(AddressFamily.InterNetwork,  SocketType.Stream, ProtocolType.Tcp);
    
                //giu socket tai dia chi dich
                socket.Bind(IP_End);
    
                //dat socket trong trang thai lang nghe
                socket.Listen(10);
    
                //chap nhan luong ket noi tu socket
                client = socket.Accept();
    
                IPEndPoint ttclient = (IPEndPoint)client.RemoteEndPoint;
                MessageBox.Show(Convert.ToString(ttclient.Address) + " , " + Convert.ToString(ttclient.Port));
    
                byte[] data = Encoding.ASCII.GetBytes("Ket noi thanh cong !");
                client.Send(data, data.Length, SocketFlags.None);
                while(true)
                {
                    if (!client.Connected)
                        break;
                    else
                    {
                        strnhan = new byte[1024];
                        int nhan = client.Receive(strnhan, 0, strnhan.Length, SocketFlags.None);
                        MessageBox.Show(Encoding.ASCII.GetString(strnhan, 0, nhan));
    
                        data = Encoding.ASCII.GetBytes("Ket noi thanh c !");
                        client.Send(data, data.Length, SocketFlags.None);
                    }
                    Thread.Sleep(2000);
                }
                client.Close();
                socket.Close();
            }
            public void GuiDuLieu(string s)
            {
                byte[] data = Encoding.ASCII.GetBytes(s);
                client.Send(data, data.Length, SocketFlags.None);
            }
        }
    }
    Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.Net.Sockets;
    
    namespace QuanSatServerNew
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            KetNoi kn = new KetNoi();
            private void Form1_Load(object sender, EventArgs e)
            {            
                kn.MoKetNoi();
            }
    
            private void Form1_Close(object sender, EventArgs e)
            {
                MessageBox.Show("Form closing");
                kn.GuiDuLieu("exit");
            }
        }
    }
    Chương trình client:
    Code:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    using System.Net.Sockets;
    using System.Windows.Forms;
    using System.Threading;
    
    namespace QuanSatClientNew
    {
        class KetNoi
        {
            Socket skketnoi;
            public void moKetNoi(string dc)
            {
                skketnoi = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                int port = 5000;
                IPEndPoint ip_end = new IPEndPoint(IPAddress.Parse(dc), port);
                try
                {
                    skketnoi.Connect(ip_end);
                }
                catch (SocketException)
                {
                    MessageBox.Show("Ket noi that bai!");
                }
                if (skketnoi.Connected)
                {
                    byte[] strnhan = new byte[1024];
                    int nhan = skketnoi.Receive(strnhan, 0, strnhan.Length, SocketFlags.None);
                    if (string.Compare(Encoding.ASCII.GetString(strnhan, 0, nhan), "exit") == 0)
                        skketnoi.Close();
                    MessageBox.Show(Encoding.ASCII.GetString(strnhan, 0, nhan));
    
                    while (true)
                    {
                        if (skketnoi.Connected)
                        {
                            byte[] data = Encoding.ASCII.GetBytes("Da nhan dl!");
                            skketnoi.Send(data, data.Length, SocketFlags.None);
                        }
                        if (skketnoi.Connected)
                        {
                            nhan = skketnoi.Receive(strnhan, 0, strnhan.Length, SocketFlags.None);
                            if (string.Compare(Encoding.ASCII.GetString(strnhan, 0, nhan), "exit") == 0)
                                skketnoi.Close();
                            MessageBox.Show(Encoding.ASCII.GetString(strnhan, 0, nhan));
                        }
                       
                        Thread.Sleep(2000);
                    }
                }
                    skketnoi.Close();               
            }
        }
    }
    Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace QuanSatClientNew
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                KetNoi kn = new KetNoi();
                kn.moKetNoi("127.0.0.1");
            }
        }
    }
    Đã được chỉnh sửa lần cuối bởi nttt : 21-06-2007 lúc 11:26 PM.

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hà nội
    Bài viết
    204

    Ko biết hay là lười mà cứ ko cho vào thẻ [CODE] nhỉ, khó nhìn quá !!
    Life:\> dir

  3. #3
    Ngày gia nhập
    05 2007
    Bài viết
    13

    Cảm ơn bạn nhắc nhở mình. Trước mình không để ý đến thẻ [code]. Mình cũng có một chương trình báo lỗi như trên gắn gọn hơn. Mong các bạn tìm hiểu giúp mình. Cảm ơn nhiều!
    Chương trình Sever:
    Code:
    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading;
    class SimpleTcpSrvr
    {
        public static void Main()
        {
            int recv;
            byte[] data = new byte[1024];
            IPEndPoint ipep = new IPEndPoint(IPAddress.Any,9050);
            Socket newsock = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
            newsock.Bind(ipep);
            newsock.Listen(10);
            Console.WriteLine("Waiting for a client...");
            Socket client = newsock.Accept();
            IPEndPoint clientep =(IPEndPoint)client.RemoteEndPoint;
            Console.WriteLine("Connected with {0} at port {1}",clientep.Address, clientep.Port);
            string welcome = "Welcome to my test server";
            data = Encoding.ASCII.GetBytes(welcome);
            client.Send(data, data.Length,SocketFlags.None);
            while (true)
            {
                data = new byte[1024];
                recv = client.Receive(data);
    
                if (recv == 0)
                    break;
    
                Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
                client.Send(data, recv, SocketFlags.None);
                Thread.Sleep(1000);
                GC.Collect();
            }
            Console.WriteLine("Disconnected from {0}",clientep.Address);
            client.Close();
            newsock.Close();
        }
    }
    Chương trình Client
    Code:
    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading;
    class SimpleTcpClient
    {
        public static void Main()
        {
            byte[] data = new byte[1024];
            string input, stringData;
            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);
            Socket server = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
            try
            {
                server.Connect(ipep);
            } catch (SocketException e)
            {
                Console.WriteLine("Unable to connect to server.");
                Console.WriteLine(e.ToString());
                return;
            }
            int recv = server.Receive(data);
            stringData = Encoding.ASCII.GetString(data, 0, recv);
            Console.WriteLine(stringData);
            while(true)
            {
                input = "heelooo";
                
                server.Send(Encoding.ASCII.GetBytes(input));
                data = new byte[1024];
                recv = server.Receive(data);
                stringData = Encoding.ASCII.GetString(data, 0, recv);
                Console.WriteLine(stringData);
                Thread.Sleep(1000);
                GC.Collect();
            }
            Console.WriteLine("Disconnecting from server...");
            server.Shutdown(SocketShutdown.Both);
            server.Close();
        }
    }

Các đề tài tương tự

  1. Trả lời: 4
    Bài viết cuối: 05-05-2012, 04:51 PM
  2. Kỹ thuật C++ thao tác Client & Sever trên C++ như thế nào?
    Gửi bởi thoaihuynh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 17-10-2010, 08:13 PM
  3. nhập dữ liệu từ các client và tổng hợp tức thì trên form sever
    Gửi bởi mrhua trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 17-08-2010, 11:02 PM
  4. Làm sao để một phần mềm chạy được trên mô hình Client - Sever
    Gửi bởi hvcuongit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 10
    Bài viết cuối: 06-03-2010, 12:21 AM
  5. Lỗi kết nối SQL Sever Express chạy trên Server và Client!
    Gửi bởi dinhlaota trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 12
    Bài viết cuối: 03-08-2009, 04:19 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn