Logo

Logo

socket通信(C#)

Pastore Antonio
Pastore Antonio 2022年06月06日
1035 阅读 0 评论 约 5162 字 阅读约 11 分钟

 通信两端分别为客户端(Client)和服务器(Server):

统一编码格式:【Encoding.UTF8】

测试环境:

需要启动谁就将谁设为启动项: 

(先启动Server,后启动Client)

 

服务器(Server):

1:建立一个Socket对像;

2:用socket对像的Bind()方法绑定EndPoint;

3:用socket对像的Listen()方法开始监听;

4:接受到客户端的连接,用socket对像的Accept()方法创建新的socket对像用于和请求的客户端进行通信;

5:用新的socket对象接收(Receive)和发送(Send)消息。

服务器编码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace Socket_Server
{
    class Program
    {
        static Socket ReceiveSocket;
        static void Main(string[] args)
        {
            int port = 8885;
            //侦听所有网络客户接口的客活动
            IPAddress ip = IPAddress.Any;
            //使用指定的地址簇协议、套接字类型和通信协议   <br>            ReceiveSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);
            //有关套接字设置
            ReceiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint endPoint = new IPEndPoint(ip, port);
            ReceiveSocket.Bind(new IPEndPoint(ip, port)); //绑定IP地址和端口号
            ReceiveSocket.Listen(10);  //设定最多有10个排队连接请求
            Console.WriteLine("建立连接");
            Socket socket = ReceiveSocket.Accept();

            byte[] receive = new byte[1024];
            socket.Receive(receive);
            Console.WriteLine("接收到消息:" + Encoding.UTF8.GetString(receive));
            byte[] send = Encoding.UTF8.GetBytes("成功接收消息,并回发消息。");
            socket.Send(send);
            Console.WriteLine("发送消息为:" + Encoding.UTF8.GetString(send));
        }
    }
}

启动Server等待客户端访问:需要安全权限,点击【允许访问即可】

客户端(Client):

1:建立一个Socket对像;

2:用socket对像的Connect()方法以上面建立的EndPoint对像做为参数,向服务器发出连接请求;

3:如果连接成功,就用socket对像的Send()方法向服务器发送信息;

4:用socket对像的Receive()方法接受服务器发来的信息 ;

5:通信结束后一定记得关闭socket;

客户端编码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace Socket_demo
{
    class Program
    {
        static Socket ClientSocket;
        static void Main(string[] args)
        {
            string IP = "127.0.0.1";
            int port = 8885;
            //将IP地址字符串转换成IPAddress实例
            IPAddress ip = IPAddress.Parse(IP);  
            //使用指定的地址簇协议、套接字类型和通信协议
            ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            // 用指定的ip和端口号初始化IPEndPoint实例
            IPEndPoint endPoint = new IPEndPoint(ip, port); 
            ClientSocket.Connect(endPoint);  //与远程主机建立连接

            Console.WriteLine("开始发送消息");
            //通信时实际发送的是字节数组,所以要将发送消息转换字节
            byte[] message = Encoding.UTF8.GetBytes("客户端链接127.0.0.1:8885服务器");  
            ClientSocket.Send(message);
            Console.WriteLine("发送消息为:" + Encoding.UTF8.GetString(message));
            byte[] receive = new byte[1024];
            int length = ClientSocket.Receive(receive);//length 接收字节数组长度
            Console.WriteLine("接收消息为:" + Encoding.UTF8.GetString(receive));
            ClientSocket.Close();//关闭连接
        }
    }
}

启动Client客户端,访问服务器:

 访问成功: 

 如果Server服务端未启动则为:

服务端Server接收到的消息:

创建socket线程

Thread t = new Thread(()=>{});

//将监听放在死循环内

while(true){

        socket监听

}

//启动线程
t.Start();

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Socket_Server
{
    class Program
    {
        static Socket ReceiveSocket;
        static void Main(string[] args)
        {
            //创建socket线程
            Thread t = new Thread(()=> {
                int port = 8885;
                //侦听所有网络客户接口的客活动
                IPAddress ip = IPAddress.Any;
                //使用指定的地址簇协议、套接字类型和通信协议   <br>            ReceiveSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);
                //有关套接字设置
                ReceiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint endPoint = new IPEndPoint(ip, port);
                ReceiveSocket.Bind(new IPEndPoint(ip, port)); //绑定IP地址和端口号
                ReceiveSocket.Listen(10);  //设定最多有10个排队连接请求
                Console.WriteLine("建立连接");
                while (true)
                {
                    Socket socket = ReceiveSocket.Accept();

                    byte[] receive = new byte[1024];
                    socket.Receive(receive);
                    Console.WriteLine("接收到消息:" + Encoding.UTF8.GetString(receive));
                    byte[] send = Encoding.UTF8.GetBytes("成功接收消息,并回发消息。");
                    socket.Send(send);
                    Console.WriteLine("发送消息为:" + Encoding.UTF8.GetString(send));
                }
            });
            //启动线程
            t.Start();
        }
    }
}

启动服务器,服务器端可以无限次数的接收客户端信息了。

到这里,Socket的基础技能讲解就完毕了,可以通过这个技能在工作中主要会进行推送功能编码,【推送】是一个非常重要的功能,你手机里的各种推送广告、APP的各种消息推送、最最基础的QQ、微信的聊天功能都依赖于此项技术。后面会对【Web Socket】进行讲解,关注好,后面直接查看此【分类专栏】即可。

作业项目,通过此demo,自行搭建Winform项目,进行Socket服务器端,与Client客户端,进行信息交互。

可以分开两个机器,使用【ipconfig】查看各自的IP,使用【ping】命令测试网络是否通畅,设置好对应的端口号进行相互访问即可完成通信功能。

查看完整代码

橙子主题打折出售

其实我不卖,主要是这里是放广告的,所以就放了一个
毕竟主题都没做完,卖了也是坑.

购买它

附件下载

共 10 个文件
20210926223620992
PNG 480.6 KB
20210926215722610
PNG 38.5 KB
20210926220529643
PNG 17.4 KB
20210926222141825
PNG 393.6 KB
20210926220813726
PNG 150.6 KB
20210926222235131
PNG 391.5 KB
20210926222302663
PNG 48.0 KB
2021092622132074
PNG 104.4 KB
20210926222342953
PNG 46.8 KB
20210926223155342
PNG 46.5 KB
部分文章可能存在转载,如果涉及到侵权,请联系删除文章。

探索AIGC相关的精彩内容,共 15 篇文章

Azure AI 服务之语音识别

简介 Azure AI 服务中的语音识别 API 是微软提供的一项先进技术,旨在帮助开发者轻松实现语 ... socket通信(C#)

2026-02-17 · Xzavier Aaron
MCP | 一文详解什么是 MCP以及 MCP 可以做什么

一、什么是 MCP MCP(Model Context Protocol)是一个专为大型语言模型(L ... socket通信(C#)

2026-02-14 · Shen, Luke
你的工作流程,值得一个“全自动数字分身”:录制、截图、成文,一气呵成

一、一句话认识 TestFlow Recorder 在数字化工作环境中,如何准确记录操作步骤并生成清 ... socket通信(C#)

2026-02-14 · Xzavier Aaron
Flowise 前端框架配置指南

用户需求 问题:有没有适合配置 Flowise 的前端框架? 目标:寻找类似 Open WebUI ... socket通信(C#)

2026-02-14 · Xzavier Aaron