新思想

C# 简单聊天GUI 源代码

简单聊天GUI

SimpleIM

服务器端:

using System;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;

namespace SimpleIM
{
    public partial class Form1 : Form
    {
        // 申明变量
        private TcpListener tcpListen = null;
        private TcpClient tcpClient = null;
        private int Port = 888;
        IPAddress ipaddress;
        private NetworkStream networkStream = null;
        private BinaryReader reader;
        private BinaryWriter writer;

        // 申明委托
        // 显示消息
        private delegate void ShowMessage(string str);
        private ShowMessage showMessageCallback;

        // 清空消息
        private delegate void ResetMessage();
        private ResetMessage resetMessageCallBack;

        public Form1()
        {
            InitializeComponent();

            // 实例化委托
            // 显示消息
            showMessageCallback = new ShowMessage(showMessage);

            // 重置消息
            resetMessageCallBack = new ResetMessage(resetMessage);

            ipaddress = IPAddress.Loopback;
            Port = Convert.ToInt32(tstbPort.Text);
        }

        // 定义回调函数
        // 显示消息
        private void showMessage(string str)
        {
            tbResult.AppendText(str);
        }

        // 清空消息
        private void resetMessage()
        {
            tbMsg.Clear();
            tbMsg.Focus();
        }

        private void Form1_Activated(object sender, EventArgs e)
        {
            tbMsg.Focus();
        }

        private void tsbStartStop_Click(object sender, EventArgs e)
        {
            Port = Convert.ToInt32(tstbPort.Text);
            if (tsbStartStop.Text == "启动")
            {
                try
                {
                    tcpListen = new TcpListener(ipaddress, Port);
                    tcpListen.Start();
                    // 启动一个线程来接受请求
                    Thread acceptThread = new Thread(acceptClientConnect);
                    acceptThread.Start();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                tsbStartStop.Text = "停止";
                tsbStartStop.ToolTipText = "停止";
            }
            else
            {
                try
                {
                    if (reader != null)
                    {
                        reader.Close();
                    }
                    if (writer != null)
                    {
                        writer.Close();
                    }
                    if (tcpClient != null)
                    {
                        // 断开连接
                        tcpClient.Close();
                        tcpListen.Stop();
                    }
                    tslMsg.Text = "断开连接";
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                tslMsg.Text = "链接已断开";
                tsbStartStop.Text = "启动";
                tsbStartStop.ToolTipText = "启动";
            }
        }

        // 接受请求
        private void acceptClientConnect()
        {
            tslMsg.Text = "正在监听";
            Thread.Sleep(500);
            try
            {
                tslMsg.Text = "等待连接";
                tcpClient = tcpListen.AcceptTcpClient();
                if (tcpClient != null)
                {
                    tslMsg.Text = "接受到连接";
                    networkStream = tcpClient.GetStream();
                    reader = new BinaryReader(networkStream);
                    writer = new BinaryWriter(networkStream);
                    Thread threadread = new Thread(new ThreadStart(round));
                    threadread.Start();
                }
            }
            catch
            {
                tslMsg.Text = "停止监听";
                Thread.Sleep(500);
                tslMsg.Text = "就绪";
            }
        }

        // 接收消息
        private void round()
        {
            tslMsg.Text = "接受消息中";
            try
            {
                while (reader != null)
                {
                    string receivemessage = reader.ReadString();
                    tbResult.Invoke(showMessageCallback, tcpClient.Client.RemoteEndPoint + ": " + receivemessage + Environment.NewLine);
                }
            }
            catch
            {
            }
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            if (tbMsg.Text != string.Empty)
            {
                try
                {
                    tslMsg.Text = "正在发送";
                    writer.Write(tbMsg.Text);
                    writer.Flush();
                    tbResult.Invoke(showMessageCallback, "Me: " + tbMsg.Text + Environment.NewLine);
                    tbMsg.Invoke(resetMessageCallBack, null);
                }
                catch
                {
                }
            }
        }
    }
}

 

客户端:

using System;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;

namespace SimpleIMClient
{
    public partial class Form1 : Form
    {
        // 申明变量
        private TcpClient tcpClient = null;
        private NetworkStream networkStream = null;
        private BinaryReader reader;
        private BinaryWriter writer;

        // 申明委托
        // 显示消息
        private delegate void ShowMessage(string str);
        private ShowMessage showMessageCallback;

        // 清空消息
        private delegate void ResetMessage();
        private ResetMessage resetMessageCallBack;

        public Form1()
        {
            InitializeComponent();

            // 实例化委托
            // 显示消息
            showMessageCallback = new ShowMessage(showMessage);

            // 重置消息
            resetMessageCallBack = new ResetMessage(resetMessage);
        }

        // 显示消息
        private void showMessage(string str)
        {
            tbResult.AppendText(str);
        }

        // 清空消息
        private void resetMessage()
        {
            tbMsg.Clear();
            tbMsg.Focus();
        }

        private void tsbConnect_Click(object sender, EventArgs e)
        {
            if (tsbConnect.Text == "连接")
            {
                try
                {
                    // 通过一个线程发起请求,多线程
                    Thread connectThread = new Thread(ConnectToServer);
                    connectThread.Start();
                    tsbConnect.Text = "断开";
                    tsbConnect.ToolTipText = "断开";
                }
                catch
                {
                    MessageBox.Show("无法连接");
                }
            }
            else
            {
                try
                {
                    if (reader != null)
                    {
                        reader.Close();
                    }
                    if (writer != null)
                    {
                        writer.Close();
                    }
                    if (tcpClient != null)
                    {
                        // 断开连接
                        tcpClient.Close();
                    }
                    // "断开了连接"
                    tsbConnect.Text = "连接";
                    tsbConnect.ToolTipText = "连接";
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

        // 连接服务器方法,建立连接的过程
        private void ConnectToServer()
        {
            try
            {
                if (tstbIP.Text == string.Empty || tstbPort.Text == string.Empty)
                {
                    MessageBox.Show("请先输入服务器的IP地址和端口号");
                }

                IPAddress ipaddress = IPAddress.Parse(tstbIP.Text);
                tcpClient = new TcpClient();
                tcpClient.Connect(ipaddress, int.Parse(tstbPort.Text));

                // 延时操作
                Thread.Sleep(500);
                if (tcpClient != null)
                {
                    networkStream = tcpClient.GetStream();
                    reader = new BinaryReader(networkStream);
                    writer = new BinaryWriter(networkStream);
                }

                Thread receiveThread = new Thread(receiveMessage);
                receiveThread.Start();
            }
            catch
            {
                Thread.Sleep(500);
            }
        }

        // 接受消息
        private void receiveMessage()
        {
            try
            {
                while (reader != null)
                {
                    string receivemessage = reader.ReadString();
                    tbResult.Invoke(showMessageCallback, tcpClient.Client.RemoteEndPoint + ": " + receivemessage + Environment.NewLine);
                }
            }
            catch
            {
            }
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            try
            {
                writer.Write(tbMsg.Text);
                writer.Flush();
                tbResult.Invoke(showMessageCallback, "Me: " + tbMsg.Text + Environment.NewLine);
                tbMsg.Invoke(resetMessageCallBack, null);
            }
            catch
            {
            }
        }
    }
}

 

源程序下载

执行程序下载

posted on 2015-12-15 22:28  新思想  阅读(1231)  评论(0)    收藏  举报

导航