初学socket制作cs通信 C#

 设计思路

主要问题是:服务器socket和客户端socket的建立、Socket的基本动作(AcceptConnectSendReceive)等

1、服务器和客户端分为两个类,两个类中的主要方法如下:

SocketServer:

1)public ServerForm();//构造函数

2) private void Run();//建立并运行服务器

3)private void ListenConnect();//启动服务器socket监听

4)private void ReceiveMessage(object clientSocket);//接收客户端socket数据事件

5)private void sendMessage(Socket serverSocket,string message);//向客户端socket发送数据

6)private void setReceiveRichTextBox(string message);//在richTextBox1设置显示消息

7) private void setListBox(int flag, string message);//在listBox1设置显示客户端信息

8) private void button1_Click(object sender, EventArgs e);//点击按钮事件,向客户端发送消息

9) private void richTextBox1_TextChanged(object sender, EventArgs e);//

 

SocketClient:

1)public ClientForm();//构造函数

2)private void Run();//建立并运行客户端

3)private void ReceiveMessage(object socket);//接收服务器socket数据事件

4)private void SendMessage(string message);//向服务器socket发送

5)private void setReceiveRichTextBox(string message);//在richTextBox1设置显示消息

6)private void button1_Click(object sender, EventArgs e);/点击按钮事件,向服务器发送消息

7)private void richTextBox2_TextChanged(object sender, EventArgs e);//

 


 

 

 

三、程序代码及运行结果:

 

1、ServerSocket程序代码如下:

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.Sockets;

using System.Net;

using System.Threading;

 

namespace SocketExample

{

    public partial class ServerForm : Form

    {

 

        private IPAddress ip = IPAddress.Parse("127.0.0.1");

        private int port = 9191;

        private byte[] result = new byte[1024];

        private Socket serverSocket;

        private int user = 0;//客í户§端?个?数簓

        private Dictionary<String,Socket> socketList=new Dictionary<string,Socket>();

 

 

 

        private delegate void SetRichTextBoxMessagedelegate(string message);

        SetRichTextBoxMessagedelegate setReceiveRichBoxMessage;

       // SetRichTextBoxMessagedelegate setSendRichBoxMessage;

        private delegate void SetListBoxMessagedelegate(int flag,string message);

        SetListBoxMessagedelegate setListBoxMessage;

        

        public ServerForm()

        {

            InitializeComponent();

            Run();

        }

        private void Run()

        {

            //建¨立ⅰ?服务?器÷socket,?启?动ˉ监à听瑈线?程ì

            serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

            serverSocket.Bind(new IPEndPoint(ip,port));

            serverSocket.Listen(10);

 

            setReceiveRichBoxMessage = new SetRichTextBoxMessagedelegate(setReceiveRichTextBox);

            setListBoxMessage = new SetListBoxMessagedelegate(setListBox);

 

            Thread thread = new Thread(ListenConnect);

            thread.IsBackground = true;

            thread.Start();

 

        }

        private void ListenConnect() {

            while (true)

            {

                Socket clientSocket = serverSocket.Accept();

                ++user;

                socketList.Add(clientSocket.RemoteEndPoint.ToString(),clientSocket);

                clientSocket.Send(Encoding.UTF8.GetBytes("Hi!"));

                if (InvokeRequired)

                {

                    this.Invoke(setReceiveRichBoxMessage, "客í户§端? " + clientSocket.RemoteEndPoint.ToString() +

                        " 已?连?接ó!" + Environment.NewLine);

                    this.Invoke(setReceiveRichBoxMessage, "已?经-有瓺" + user + "个?用?户§连?接ó到?服务?器÷" + Environment.NewLine + Environment.NewLine);

                    this.Invoke(setListBoxMessage, 1, clientSocket.RemoteEndPoint.ToString());

                }

                else

                {

                    richTextBox1.Text += "客í户§端? " + clientSocket.RemoteEndPoint.ToString() +

                        " 已?连?接ó!" + Environment.NewLine;

                    richTextBox1.Text += "已?经-有瓺" + user + "个?用?户§连?接ó到?服务?器÷" + Environment.NewLine + Environment.NewLine;

                    listBox1.Items.Add(clientSocket.RemoteEndPoint.ToString());

                }

                Thread thread = new Thread(ReceiveMessage);

                thread.IsBackground = true;

                thread.Start(clientSocket);

            }

        }

        private void ReceiveMessage(object clientSocket)

        {

            Socket ClientSocket = (Socket)clientSocket;

            while (true)

            {

                try

                {

                    int number = ClientSocket.Receive(result);

                    if (InvokeRequired)

                    {

                        this.Invoke(setReceiveRichBoxMessage, "客í户§端?" + ClientSocket.RemoteEndPoint.ToString() + "说μ:阰" + Environment.NewLine

                            + Encoding.UTF8.GetString(result, 0, number) + Environment.NewLine + Environment.NewLine);

 

                    }

                    else

                        richTextBox1.Text += "客í户§端?" + ClientSocket.RemoteEndPoint.ToString() + "说μ:阰" + Environment.NewLine

                            + Encoding.UTF8.GetString(result, 0, number) + Environment.NewLine + Environment.NewLine;

                }

                catch {

                    --user;

                    socketList.Remove(ClientSocket.RemoteEndPoint.ToString());

                    if (InvokeRequired)

                    {

                        this.Invoke(setReceiveRichBoxMessage, "客í户§端?" + ClientSocket.RemoteEndPoint.ToString() + "断?开a连?接ó。£" + Environment.NewLine);

                        this.Invoke(setReceiveRichBoxMessage, "还1剩骸?下?" + user + "个?用?户§。£" + Environment.NewLine + Environment.NewLine);

                        this.Invoke(setListBoxMessage, 0, ClientSocket.RemoteEndPoint.ToString());

                    }

                    else

                    {

                        richTextBox1.Text += "客í户§端?" + ClientSocket.RemoteEndPoint.ToString() + "断?开a连?接ó。£" + Environment.NewLine

                            + "还1剩骸?下?" + user + "个?用?户§。£" + Environment.NewLine + Environment.NewLine;

                        listBox1.Items.Remove(ClientSocket.RemoteEndPoint.ToString());

                    }

                    ClientSocket.Shutdown(SocketShutdown.Both);

                    ClientSocket.Close();

                    break;

                }

            }

        }

        //发ぁ?送í消?息¢

        private void sendMessage(Socket serverSocket,string message) {

            if (message == "")

                return;

            try

            {

                string sMessage = "发ぁ?送í时骸?间?:阰" + DateTime.Now + Environment.NewLine + "内ú容╕为a:阰" + Environment.NewLine + message;

                serverSocket.Send(Encoding.UTF8.GetBytes(message));

                if (InvokeRequired)

                {

                    this.Invoke(setReceiveRichBoxMessage, "我ò对? " + serverSocket.RemoteEndPoint.ToString() + " 说μ:阰"

                        + Environment.NewLine + sMessage + Environment.NewLine + Environment.NewLine);

 

                }

                else

                {

                    richTextBox1.Text += "我ò对? " + serverSocket.RemoteEndPoint.ToString() + " 说μ:阰"

                        + Environment.NewLine + sMessage + Environment.NewLine + Environment.NewLine;

 

                }

            }

            catch

            {

                try

                {

                    serverSocket.Shutdown(SocketShutdown.Both);

                    serverSocket.Close();

                }

                catch

                {

                    return;

                }

            }

        }

 

        //接ó受酣?消?息¢的?窗洹?口ú

        private void setReceiveRichTextBox(string message) {

            richTextBox1.Text += message;

        }

        //设Θ?置?ListBox,?flag==1时骸?添?加ó客í户§端?,?flag==0时骸?,?移?除y客í服端?

        private void setListBox(int flag, string message)

        {

            if (flag == 1)

                listBox1.Items.Add(message);

            else if(flag==0)

                listBox1.Items.Remove(message);

        }

 

      

 

     

        private void button1_Click(object sender, EventArgs e)

        {

            try { 

                for(int i=0;i<listBox1.SelectedItems.Count;i++)

                {

                    Socket socket=socketList[listBox1.SelectedItems[i].ToString()];

                    sendMessage(socket,richTextBox2.Text);

                }

 

            }

            catch

            {

                return;

 

            }

        }

 

        private void richTextBox1_TextChanged(object sender, EventArgs e)

        {

            richTextBox1.Focus();

            richTextBox1.Select(richTextBox1.TextLength,0);

            richTextBox1.ScrollToCaret();

            richTextBox2.Focus();

        }

 

    }

}

 

2、ClientSocket程序代码如下:

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.Sockets;

using System.Net;

using System.Threading;

 

namespace SocketClient

{

    

    public partial class ClientForm : Form

    {

 

 

        private IPAddress ip = IPAddress.Parse("127.0.0.1");

        private int port = 9191;

        private byte[] result=new byte[1024];

        private Socket socket;

 

        private delegate void SetRichTextBoxMessagedelegate(string message);

        SetRichTextBoxMessagedelegate setReceiveRichBoxMessage;

 

        public ClientForm()

        {

            InitializeComponent();

            Run();

        }

        private void Run() {

            socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

 

            setReceiveRichBoxMessage = new SetRichTextBoxMessagedelegate(setReceiveRichTextBox);

 

            try

            {

                socket.Connect(new IPEndPoint(ip, port));

                richTextBox2.Text += "已?连?接ó到?服务?器÷。£" + Environment.NewLine;

                //创洹?建¨接ó收?信?息¢线?程ì

                Thread receiveThread = new Thread(ReceiveMessage);

                receiveThread.IsBackground = true;

                receiveThread.Start(socket);

 

            }

            catch {

                MessageBox.Show("连?接ó失骸?败悒?,?请?退?出?。£");

                socket.Close();

                return;

            }

        }

 

        private void ReceiveMessage(object socket)

        {

            Socket mySocket = (Socket)socket;

            while (true)

            {

                try

                {

                    int number = mySocket.Receive(result);

                    if (InvokeRequired)

                    {

                        this.Invoke(setReceiveRichBoxMessage, "服务?器÷说μ:阰" + Environment.NewLine + "时骸?间?:阰" + DateTime.Now + Environment.NewLine + "内ú容╕为a:阰" + Environment.NewLine +

                            Encoding.UTF8.GetString(result, 0, number) + Environment.NewLine + Environment.NewLine);

                    }

                    else

                    {

                        richTextBox2.Text += "服务?器÷说μ:阰" + Environment.NewLine + "时骸?间?:阰" + DateTime.Now + Environment.NewLine + "内ú容╕为a:阰" + Environment.NewLine +

                            Encoding.UTF8.GetString(result, 0, number) + Environment.NewLine + Environment.NewLine;

                    }

                }

                catch

                {

                    MessageBox.Show("接ó收?信?息¢失骸?败悒?!?\n连?接ó已?断?开a!?\n请?关?闭?后ó重?试?!?");

                }

 

            }

        }

 

        private void SendMessage(string message) {

            if (message == "")

                return;

            try

            {

                String sendMessage = "Time : " + DateTime.Now + Environment.NewLine +

                    "Messages :" + Environment.NewLine + message;

                socket.Send(Encoding.UTF8.GetBytes(sendMessage));

                richTextBox2.Text += "我ò说μ:阰" + Environment.NewLine + sendMessage + Environment.NewLine + Environment.NewLine;

            }

            catch { 

                

            }

        }

        private void setReceiveRichTextBox(string message) {

            richTextBox2.Text += message;

        }

 

 

    

   

        private void button1_Click(object sender, EventArgs e)

        {

            SendMessage(richTextBox1.Text);

            richTextBox1.Text = "";

        }

 

        private void richTextBox2_TextChanged(object sender, EventArgs e)

        {

            richTextBox2.Focus();//获?取?焦1点?

            richTextBox2.Select(richTextBox2.TextLength, 0);//光a标括?定¨位?到?文?本?最?后ó

            richTextBox2.ScrollToCaret();//滚?动ˉ到?光a标括?处鋦

            richTextBox2.Focus();

        }

 

 

    }

}

 

 

 

 

 

 

 

 

 

 

      

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值