예제 #1
0
        // khi client kết nối đến server, server sẽ gửi lại toàn bộ thông tin các thuộc tính
        // của mình, client sẽ khởi tạo dựa theo các thuộc tính đó, gán lại hết luôn
        public void EventInit(InitData data)
        {
            col                     = data.col;
            row                     = data.row;
            WP                      = data.WP;
            HP                      = data.HP;
            map                     = data.map;
            map1                    = data.map1;
            map2                    = data.map2;
            indexPiece              = data.indexPiece;
            pieces                  = data.pieces;
            selectedPiece           = data.selectedPiece;
            image                   = data.image;
            frmRemote.index         = data.remoteIndex;
            frmRemote.pieces        = data.pieces;
            frmRemote.selectedPiece = data.selectedPiece;
            countPieces             = data.pieces.Count;

            frmHelp.pictureBox.Image = image;

            mainPic.Enabled             = true;
            frmRemote.remotePic.Enabled = true;

            Invoke((MethodInvoker) delegate()
            {
                frmRemote.Show();
            });

            mainPic.Invalidate();
            frmRemote.remotePic.Invalidate();

            cbHelp.Enabled = true;

            numCol.Value = data.col;
            numRow.Value = data.row;

            frmRemote.lblSelected.Text = data.remoteIndex.ToString();
        }
예제 #2
0
        // hàm tạo kết nối
        void Connect()
        {
            try
            {
                // khởi tạo một danh sách client
                clientList = new List <Socket>();

                // mấy bước khởi tạo server, IPAddress.Any nghĩa là client IP nào cũng kết nối được
                // Port = 9999 thì chọn bừa cũng được, miễn là giống với Port bên client, kiểu
                // 2 thằng phải vào cùng một chỗ mới gặp nhau được
                IP     = new IPEndPoint(IPAddress.Any, 9999);
                server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                server.Bind(IP);

                // khởi tạo xong thì tạo một luồng chạy ngầm liên tục lắng nghe mấy thằng kết nối đến
                Thread Listen = new Thread(() =>
                {
                    try
                    {
                        while (isActive)
                        {
                            // ở đây, server sẽ lắng nghe, đợi client kết nối đến
                            // các lệnh bên dưới sẽ ko chạy cho đến khi nào có một client kết nối đến
                            // nếu một client kết nối đến, các lệnh khởi tạo bên dưới sẽ được chạy và
                            // vòng lặp lại quay về đây, server lại lắng nghe tiếp client khác
                            // max 4 client
                            server.Listen(4);

                            // client kết nối thì chấp nhận và lưu client đó lại, thêm vào danh sách các client
                            Socket client = server.Accept();
                            clientList.Add(client);

                            // đồng thời gửi sự kiện khởi tạo cho client đó để client đó sao chép dữ liệu cho giống với server
                            var data = new InitData(frmMain.row, frmMain.col, frmMain.WP, frmMain.HP,
                                                    frmMain.map, frmMain.map1, frmMain.map2, frmMain.indexPiece, frmMain.pieces,
                                                    frmMain.selectedPiece, frmMain.image, frmRemote.index, frmRemote.selectedPiece);
                            client.Send(Serialize(new SendObject(SendObject.INIT, data)));

                            // đồng thời tạo thêm một luồng để nhận dữ liệu từ client này
                            // có bao nhiêu client thì phải tạo thêm bấy nhiêu luồng
                            Thread receive       = new Thread(Receive);
                            receive.IsBackground = true;
                            receive.Start(client);
                        }
                    }
                    catch
                    {
                        IP     = new IPEndPoint(IPAddress.Any, 9999);
                        server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
                    }
                });

                Listen.IsBackground = true;
                Listen.Start();
            }
            catch
            {
                isActive = false;
                MessageBox.Show("Không thể tạo");
            }
        }