⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clientmain.cs

📁 P2P服务器技术聊天代码 没有打洞技术 服务器记录了所有在线用户
💻 CS
字号:
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 Client
{
    public partial class ClientMain : Form
    {
        public ClientMain()
        {
            InitializeComponent();
        }

        private IPEndPoint ServerInfo;
        private Socket ClientSocket;
        private Byte[] MsgBuffer;
        private Byte[] MsgSend;

        private void ClientMain_Load(object sender, EventArgs e)
        {
            this.CmdSend.Enabled = false;
            this.CmdExit.Enabled = false;

            ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            MsgBuffer = new Byte[65535];
            MsgSend = new Byte[65535];
            CheckForIllegalCrossThreadCalls = false;

            Random TRand=new Random();
            this.UserName.Text = "用户" + TRand.Next(10000).ToString();
        }

        private void CmdEnter_Click(object sender, EventArgs e)
        {
            ServerInfo = new IPEndPoint(IPAddress.Parse(this.ServerIP.Text), Convert.ToInt32(this.ServerPort.Text));

            try
            {
                ClientSocket.Connect(ServerInfo);

                ClientSocket.Send(Encoding.Unicode.GetBytes("用户: " + this.UserName.Text + " 进入系统!\n"));

                ClientSocket.BeginReceive(MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback(ReceiveCallBack), null);

                this.SysMsg.Text += "登录服务器成功!\n";
                this.CmdSend.Enabled = true;
                this.CmdEnter.Enabled = false;
                this.CmdExit.Enabled = true;
            }
            catch
            {
                MessageBox.Show("登录服务器失败,请确认服务器是否正常工作!");
            }
        }

        private void ReceiveCallBack(IAsyncResult AR)
        {
            try
            {
                int REnd = ClientSocket.EndReceive(AR);
                this.RecieveMsg.AppendText(Encoding.Unicode.GetString(MsgBuffer, 0, REnd));
                ClientSocket.BeginReceive(MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback(ReceiveCallBack), null);

            }
            catch
            {
                MessageBox.Show("已经与服务器断开连接!");
                this.Close();
            }

        }

        private void CmdSend_Click(object sender, EventArgs e)
        {
            MsgSend = Encoding.Unicode.GetBytes(this.UserName.Text + "说:\n" + this.SendMsg.Text + "\n");
            if (ClientSocket.Connected)
            {
                ClientSocket.Send(MsgSend);
                this.SendMsg.Text = "";
            }
            else
            {
                MessageBox.Show("当前与服务器断开连接,无法发送信息!");
            }
        }

        private void CmdExit_Click(object sender, EventArgs e)
        {
            if (ClientSocket.Connected)
            {
                ClientSocket.Send(Encoding.Unicode.GetBytes(this.UserName.Text + "离开了房间!\n"));
                ClientSocket.Shutdown(SocketShutdown.Both);
                ClientSocket.Disconnect(false);
            }
            ClientSocket.Close();

            this.CmdSend.Enabled = false;
            this.CmdEnter.Enabled = true;
            this.CmdExit.Enabled = false;
        }

        private void RecieveMsg_TextChanged(object sender, EventArgs e)
        {
            this.RecieveMsg.ScrollToCaret();
        }

        private void SendMsg_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Control && e.KeyValue == 13)
            {
                e.Handled = true;
                this.CmdSend_Click(this, null);
            }
        }




    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -