c#Socket 编程

程序截图


服务端

首先声明一个服务端的SOCKET 基于TCP的 并指定它要绑定的IP和端口 

ServerSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse ("192.168.1.101");
ServerInfo = new IPEndPoint (ip,3001);
ServerSocket.Bind (ServerInfo);//将SOCKET接口和IP端口绑定
ServerSocket.Listen (10);//开始监听,并且挂起数为10


然后是开一个线程专门用来接收客户端的消息 和连接请求 

ServerThread = new Thread (new ThreadStart (RecieveAccept));//将接受客户端连接的方法委托给线程
ServerThread.Start ();//线程开始运行


ClientSocket 是一个客户端的数组 里边存放所有连接的客户端

这里给每一个客户端起一个名字 并且用recieveCllback 进行接受到之后处理

  private void RecieveAccept( )
        {
            while (true)
            {
                ClientSocket[ClientNumb] = ServerSocket.Accept ();
                ClientSocket[ClientNumb].BeginReceive (MsgBuffer, 0, MsgBuffer.Length, SocketFlags.None,
                new AsyncCallback (RecieveCallBack), ClientSocket[ClientNumb]);
                lock (this.richTextBox1)
                {
                    this.richTextBox1.Text+= (ClientSocket[ClientNumb].RemoteEndPoint.ToString () + " 成功连接服务器.");
                }
                ClientNumb++;
            }
        }


找个地方把它显示了就可以了
 private void RecieveCallBack(IAsyncResult AR)
        {
            try
            {
                Socket RSocket = (Socket)AR.AsyncState;
                int REnd = RSocket.EndReceive (AR);
                //对每一个侦听的客户端端口信息进行接收和回发
                for (int i = 0; i < ClientNumb; i++)
                {
                    lock (this.richTextBox4)
                    {
                        this.richTextBox1.AppendText (Encoding.Unicode.GetString (MsgBuffer, 0, REnd));
                    }
                    //同时接收客户端回发的数据
                    RSocket.BeginReceive (MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback (RecieveCallBack), RSocket);
                }
            }
            catch
            {
            }

        }
发送数据

 byte [] mm=new byte[100];
 mm=Encoding.Unicode.GetBytes(richTextBox3.Text);
 ClientSocket[i].Send (mm);

客户端
第一步连接服务器 serverinfo为IP和端口 然后开启异步接受数据  recieveCllback 1同理用来进行接受到之后的操作

 ClientSocket1 = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  
 ClientSocket1.Connect (ServerInfo);
 ClientSocket1.BeginReceive (MsgBuffer1, 0, MsgBuffer.Length, SocketFlags.None, new AsyncCallback (ReceiveCallBack1), null);


也是找个地方显示就好了
 private void ReceiveCallBack1(IAsyncResult AR)
        {
            try
            {
                int REnd = ClientSocket1.EndReceive (AR);

                lock (this.richTextBox4)
                {
                    this.richTextBox4.AppendText (Encoding.Unicode.GetString (MsgBuffer1, 0, REnd));
                }
                ClientSocket1.BeginReceive(MsgBuffer1, 0, MsgBuffer.Length, 0, new AsyncCallback (ReceiveCallBack1), null);

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

        }

客户端发送数据

MsgSend1 = Encoding.Unicode.GetBytes (   richTextBox2.Text );
            if (ClientSocket1.Connected)
            {
                //将数据发送到连接的 System.Net.Sockets.Socket。
                ClientSocket1.Send (MsgSend1);
              

            }
            else
            {
                MessageBox.Show ("当前与服务器断开连接,无法发送信息!");
            }


FORM 的LOAD事件写一句 否则出现错误

CheckForIllegalCrossThreadCalls = false;










C# Socket编程是基于Socket类库的网络编程技术。Socket类库提供了一种方便的方式来创建客户端和服务器应用程序,实现数据的传输和交换。在C#中,可以使用Socket类库来实现TCP或UDP协议的通信。 Socket网络编程的基本步骤如下: 1. 创建Socket对象:使用Socket类的构造函数创建Socket对象,可以指定地址族、套接字类型和协议等参数。 2. 绑定本地地址:如果是服务器端,需要将Socket对象绑定到本地IP地址和端口上。 3. 监听连接请求:服务器端需要调用Listen方法开始监听客户端的连接请求。 4. 建立连接:客户端使用Connect方法连接到服务器的IP地址和端口。 5. 发送和接收数据:通过Socket对象的Send和Receive方法进行数据的发送和接收。 6. 关闭连接:使用Socket对象的Close方法关闭连接。 C#提供了多种编程方式来实现Socket编程,包括基于阻塞的同步方式和基于非阻塞的异步方式。在网络编程中,客户端程序发起连接请求,服务器端程序等待连接。客户端和服务器之间通过Socket对象进行数据交换。 总结一下,C# Socket编程是一种利用Socket类库实现网络通信的技术,其中客户端发起连接请求,服务器等待连接。通过Socket对象进行数据的发送和接收。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C#网络编程Socket编程)](https://blog.csdn.net/dust__/article/details/105154745)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值