C#Socket通信

在C#中使用Socket通信 文章按照 Socket 的 创建、连接、传输数据、释放资源的过程来写。给出方法、参数的详细信息。 阅读详情

关于C#socket通信,分为同步和异步通信,本文简单介绍一下同步通信。

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

(1)Cient:(客户端)

1:建立一个Socket对像;

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

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

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

5:通信结束后一定记得关闭socket (未实现);

代码有待完善,只是简单的介绍客户端的创建。(会产生粘包等问题)

仅供参考仅供参考

class Client
    {
        Socket tcpClient;

        public Client(string ip,int port) {
            //创建Socket
             tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //地址
            IPAddress iPAddress;
            if (!IPAddress.TryParse(ip,out iPAddress)) {
                Console.WriteLine("IP地址有误,创建客户端失败");
                return;
            }
            //地址:端口号
            IPEndPoint point = new IPEndPoint(iPAddress,port);

            try
            {
                tcpClient.Connect(point);//通过ip:端口号来定位一个要连接服务器
            }
            catch (Exception e) {
                Console.WriteLine(e.Message);//如果访问的服务器未打开 抛出异常信息
                return;
            }

            Console.WriteLine("连接成功");
        }

        public void Start() {
            Thread th = new Thread(SendMessage);
            th.Start();
            th.IsBackground = true;
            this.ReceiveMessage();
        }

        /// <summary>
        /// 客户端发送信息
        /// </summary>
        public void SendMessage() {
            while (true) {
                string value = Console.ReadLine();
                byte[] data = Encoding.Default.GetBytes(value);
                tcpClient.Send(data);
            }
        }

        /// <summary>
        /// 客服端接收信息
        /// </summary>
        public void ReceiveMessage() {
            try
            {
                while (true)
                {

                    byte[] arr = new byte[100 * 1024]; ;//arr用来接收数据 (相当于一个篮子)
                    int num = tcpClient.Receive(arr);
                    string data = Encoding.Default.GetString(arr, 0, num);//只把接收到的数据进行转换
                    Console.WriteLine(data);

                }
            }
            catch (Exception e) {
                Console.WriteLine("服务器已断开");
            }
        }


        
    }

(2)Server:(服务器) 

1:建立一个Socket对像;

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

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

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

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

代码有待完善,只是简单的介绍服务器的创建。

仅供参考仅供参考

class Server
    {
        Socket tcpServer;
        List<Socket> users = new List<Socket>();//创建客户端列表

        public Server(string ip, int port)
        {
            //1.创建socket
            tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //2.绑定IP地址和端口号

            IPAddress ipAddress;

            if (!IPAddress.TryParse(ip, out ipAddress))
            {
                Console.WriteLine("IP地址有误,创建服务器失败");
                return;
            }

            IPEndPoint point = new IPEndPoint(ipAddress, port);
            tcpServer.Bind(point);

            //限制只能100个用户接入,如果参数为0则无限制
            tcpServer.Listen(100);

        }

        public void Start()
        {
            Thread th = new Thread(UserAccept);
            th.Start();
            Thread th1 = new Thread(SendToAll);
            th1.Start();
            //Thread th2 = new Thread(ReceiveMessage);
            //th2.Start();

        }

        /// <summary>
        /// 接收用户的连接
        /// </summary>
        public void UserAccept()
        {
            Console.WriteLine("等待用户连接...");
            while (true)
            {
                Socket user = tcpServer.Accept();
                //this.ReceiveAsync(user);
                Thread thread = new Thread(ReceiveMessage);
                thread.Start(user);//每加进来一个客户端增加一个线程

                IPEndPoint str = user.RemoteEndPoint as IPEndPoint;

                Console.WriteLine(str.Address + "已连接");

                users.Add(user);
            }
        }

        /// <summary>
        /// 服务器发送信息
        /// </summary>
        public void SendToAll()
        {
            while (true)
            {
                string value = Console.ReadLine();
                byte[] data = Encoding.Default.GetBytes(value);

                for (var i = 0; i < users.Count; i++)
                {
                    try
                    {
                        users[i].Send(data);//For循环发送给每个客户端
                    }
                    catch (SocketException e)
                    {
                        IPEndPoint str = users[i].RemoteEndPoint as IPEndPoint;
                        Console.WriteLine(str.Address + "已断开连接");

                        users.RemoveAt(i);//抛出该异常说明该客户已断开连接 将其移除
                        i--;
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }

            }
        }

        /// <summary>
        /// 服务器接收信息
        /// </summary>
        public void ReceiveMessage(object user)
        {
            Socket client = user as Socket;
            while (true)
            {
                byte[] arr = new byte[100 * 1024];
                try
                {
                    int num = client.Receive(arr);
                    string value = Encoding.Default.GetString(arr, 0, num);
                    IPEndPoint str = client.RemoteEndPoint as IPEndPoint;
                    value = str.Address + ":" + value;//把客户端的地址打印出来
                    Console.WriteLine(value);

                    SendToAll(value, client);//把客户端发过来的消息群发出去
                }
                catch (SocketException e)
                {
                    IPEndPoint str = client.RemoteEndPoint as IPEndPoint;
                    Console.WriteLine(str.Address + "已下线");
                    users.Remove(client);
                    Thread.CurrentThread.Abort();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }

        /// <summary>
        /// 转发消息给其他所有客户端
        /// </summary>
        /// <param name="str">消息</param>
        /// <param name="user">发消息的客户端</param>
        public void SendToAll(string str, object user)
        {
            Socket client = user as Socket;
            byte[] data = Encoding.Default.GetBytes(str);
            for (var i = 0; i < users.Count; i++)
            {
                try
                {
                    if (client != users[i])
                    {
                        users[i].Send(data);
                    }
                }
                catch (SocketException e)
                {
                    IPEndPoint str1 = users[i].RemoteEndPoint as IPEndPoint;
                    Console.WriteLine(str1.Address + "已下线");

                    users.RemoveAt(i);
                    i--;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }

        }
}

End.....

C#网络(Socket和NetworkStream) 在C#中,Socket和NetworkStream是用于进行网络通信的两种不同的API,Socket提供了更底层且灵活的网络通信功能,适用于对网络传输细节有较高要求的场景。而NetworkStream则是基于Socket的高级封装,提供了简化的读写接口,适用于大多数常见的网络通信任务。 阅读详情

相关推荐

Skyworks SKY85331-11的Wi-Fi 6 (802.11ax)标准 2.4G 高功率WLAN前端模块解决方案

SKY85331-11是高度集成的2 GHz前端模块(FEM)包含2 GHz单刀双掷(SPDT)发送/接收(T / R)开关,2 GHz低噪声放大器(LNA)带旁路和一个2 GHz功率放大器(PA),用于大功率802.11ax应用程序和系统LNA和PA禁用功能可确保低漏电流 关闭模式。 包括一个集成的功率检测器以提供系统内的闭环功率控制。该设备提供Small (24-pin, 3 x 5 mm) (LGA)封装。 图1.引脚配置和封装如图所示 图2.信号引脚分配和功能引脚描述 图...

zhangbao19890622的博客 4507

C# Socket编程(服务端、客户端)

【代码】C# Socket编程基础。

qq1326702940的博客 9423

人工智能训练师技能等级认定四级技能考核试卷-样题1

本文为人工智能训练师四级技能考核试卷,包含六个实操考核项目,总分100分,考试时间150分钟。试卷涵盖数据处理、模型训练准备及系统维护等核心技能:1)垃圾分类数据集规范与处理(30分),要求评估数据格式并编写Python处理代码;2)学生成绩数据集分析(20分),涉及数据预处理、可视化及相关性分析;3)数据标注审核(10分),重点审核标注准确性;4)智能数据服务系统维护与优化(40分),包括安全帽数据集的项目创建、数据处理及平台协作。考核强调Python编程、数据处理平台操作及AI工作流程的实践能力。

weixin_42221934的博客 440

C#教程 socket编程

如何练成编程高手,编程需要恒心和毅力,最主要是要有信心,循序渐进地完成任务

qq_40793198的博客 5491

基于树莓派4B与NCNN的YOLOv8高效部署实战:无GPU环境下的C++加速优化全流程指南**

本文详细介绍了在树莓派4B上基于NCNN框架部署YOLOv8目标检测模型的全流程。内容包括:从PyTorch模型导出NCNN格式文件、树莓派环境配置(OpenCV和NCNN编译)、C++实现代码解析(含模型加载、推理及后处理),以及实际部署测试结果。在树莓派4B上达到约2FPS,并提供INT8量化、多线程等优化建议。该方案为无GPU设备提供了轻量化目标检测的实用部署方案,适合边缘计算场景。

FJN110的博客 917

【系统架构设计师-2026上半年真题】综合知识-参考答案及详解(75题完全回忆版)

【系统架构设计师-2026上半年真题】综合知识-参考答案及详解(75题完全回忆版)

数据知道的博客 3106

C#中的Socket

一:什么是Socket? 通过ip地址知道哪个计算机,通过端口号0-60000知道哪个计算机中的哪个软件

L的博客 1万+

[AI] 企业内网部署大模型的三种常见方案:从“能用”到“好用”的技术选型指南

企业内网部署大模型的三种方案解析:本地模型安全但门槛高,平台方案(如Dify)最平衡推荐,混合架构适合进阶需求。关键路径是渐进式演进,从快速验证到平台化建设,核心在于流程优化而非单纯选模型。数据安全、成本可控和工程落地能力是决策重点。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 772

c#Socket通信写法

respond = Encoding.UTF8.GetBytes("服务器收到:"+receiveMessage);//用respond数组接收客户端发来的字节数组,且缓存字节数据的实际长度。//使用IPAddress构造函数把IP地址转换成IPAddress对象。//用Encoding类的转换方法把收到的字节数据转换成字符串。Console.WriteLine("绑定IP地址和端口号");

2401_88994763的博客 1720

通用具身智能仿真平台桃源2.0,三行代码定义任务,数采效率最高提升20倍

木木-具身Xbot具身知识库2025年03月13日 17:40浙江在首个“城市级”大规模仿真平台GRUtopia1.0的基础上,升级后的GRUtopia2.0凭借通用模块化框架、场景资产自动化生成、高效数据采集系统三大革新,进一步向通用化、多样化、易用化迈进。仅通过单一平台、简单代码输入,即可实现仿真环境中机器人灵活训练,提升数据采集效率,为研究者提供了“一站式”具身智能开发解决方案。

具身机器人和通用AI 818

基于Python的船舶AIS数据爬取与分析:从数据采集到可视化实战

本文详细介绍了如何使用Python构建一个完整的船舶AIS数据爬取与分析系统。文章从AIS系统的基本原理讲起,逐步深入到数据采集、存储、清洗、分析和可视化的全流程。我们将使用最新的Python技术栈,包括aiohttp异步爬虫、MongoDB存储、Pandas数据处理以及Pydeck三维可视化等。本文提供了完整的代码实现,并探讨了在实际应用中可能遇到的问题及其解决方案。关键词:AIS数据、Python爬虫、异步IO、数据可视化、海事分析。

2201_76125261的博客 811

基于Netty5.0中级案例五之Netty与C#Socket收发字符串进行通信

转自:http://www.itstack.org/?post=18   前言介绍:     本案例主要介绍如何在JavaNetty与C#Sokcet进行字符串通信,Java服务端,C#客户端。     重点提示:网络通信中都是byte字节,两边通信一定要统一编码,尽量避免乱码与接收不到的问题。 环境需求:【一下内容下文提供下载】     1、Java         1.1、jdk...

hemeinvyiqiluoben的专栏 2541

查找【优快云】- 人工客服

【代码】查找【优快云】- 人工客服。

👨‍💻 前端开发者 | 技术分享者 1405

C#SOCKET异步通信

C#SOCKET异步通信的巨坑,有正在写这方面程序的朋友一定要看完哦

雁南飞的专栏 5710

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

c#Socket通信实例

一、Socket通信简介 1.按惯例先来介绍下socket Windows中的很多东西都是从Unix领域借鉴过来的,Socket也是一样。在Unix中,socket代表了一种文件描述符(在Unix中一切都是以文件为单位),而这里这个描述符则是用于描述网络访问的。什么意思呢?就是程序员可以通过socket来发送和接收网络上的数据。你也可以理解成是一个API。有了它,你就不用直接去操作网卡了,而是通过这个接口,这样就省了很多复杂的操作。 在C#中,MS为我们提供了 System.Net.Sockets 命名

huang714的专栏 4710

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

c#Socket通信

网络通信的基本知识: 首先应该确定IP地址和端口号,端口号为了确定计算机的哪个进程,比如同一主机是微信还是qq通信 要进行通信首先应该确定一种协议,通常用TCP可靠和UDP不可靠协议,当然带来的速度也会不同,多数游戏中采用TCP协议。 面向连接套接字通信步骤: 服务端: 先申请一个Socket,绑定一个IP地址和端口,开始接听,等待接受连接。 客户端: 申请一个Socket,连...

weixin_30698297的博客 163

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

c#Socket通信入门实例

在C#中使用socket通信,只要使用 visual studio中自带的 using System.Net和 using System.Net.Sockets;命名空间,这样就可以进行通信了。 一般服务端先运行,然后在运行客户端。 其socket通信的流程如下: 服务端: 1:创建一个socket的对象,Socket socketserver=new

love_kevin的博客 1万+

C#socket通信

关于C#socket通信,分为同步和异步通信,本文简单介绍一下同步通信。 通信两端分别为客户端(Client)和服务器(Server): (1)Cient: 1:建立一个Socket对像; 2:用socket对像的Connect()方法以上面建立的EndPoint对像做为参数,向服务器发出连接请求; 3:如果连接成功,就用socket对像的Send()方法向服务器发送信息; 4:用so...

bruce135lee的专栏 246

C#socket通信随笔

C#socket通信随笔

lucky3260的博客 1682

C#Socket异步通信

Client(客户端) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net; using System.Net.Sockets; namespace Socket异步通信客户端 { ...

qq_43493396的博客 1085

C#socket同步通信

源博主链接 关于C#socket通信,分为同步和异步通信,本文简单介绍一下同步通信。 通信两端分别为客户端(Client)和服务器(Server): (1)Cient: 1:建立一个Socket对像; 2:用socket对像的Connect()方法以上面建立的EndPoint对像做为参数,向服务器发出连接请求; 3:如果连接成功,就用socket对像的Send()方法向服务器发送信息; 4:用socket对像的Receive()方法接受服务器发来的信息; 5:通信结束后一定记得关闭sock.

晚风凉 1317
上一篇: C#线程基础知识
下一篇: 单例模式
zhong_0419
博客等级 码龄8年 30粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值