当前位置: 首页 > news >正文

C#中Socket通信常用的方法

创建Socket

在C#中创建一个Socket对象的基本步骤如下:

  1. 引入命名空间: 首先,确保你的文件顶部包含了以下命名空间的引用:

    using System.Net;
    using System.Net.Sockets;
  2. 创建Socket实例: 你可以创建一个Socket实例,指定协议类型和套接字类型。例如,如果你想要创建一个IPv4的TCP套接字,你可以这样做:

    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    • AddressFamily.InterNetwork 表示使用IPv4。
    • SocketType.Stream 表示这是一个面向连接的套接字(如TCP)。
    • ProtocolType.Tcp 表示使用TCP协议。
  3. 绑定Socket: 如果你的服务端需要绑定到特定的端口和IP地址,你可以使用Bind方法:

    IPAddress localIP = IPAddress.Any; // 绑定到所有可用的网络接口
    int port = 11000; // 端口号
    socket.Bind(new IPEndPoint(localIP, port));IPEndPoint是.NET框架中的一个类,它表示一个Internet协议(IP)地址和端口号的组合,通常用于指定网络服务的端点。在Socket编程中,IPEndPoint用于绑定套接字到特定的IP地址和端口,或者作为远程服务端点的连接目标。以下是IPEndPoint的一些常用属性和方法:属性
    Address: 获取或设置IPEndPoint的IP地址。
    Port: 获取或设置IPEndPoint的端口号。
    构造函数
    IPEndPoint(IPAddress address, int port): 创建一个新的IPEndPoint实例,使用指定的IP地址和端口号。
  4. 监听连接: 在服务端,你需要监听传入的连接请求:

    int backlog = 100; // 等待队列的长度
    socket.Listen(backlog);
  5. 接受连接: 服务端使用Accept方法接受连接,这将返回一个新的Socket用于与客户端通信:

    Socket clientSocket = socket.Accept();
  6. 连接到服务端: 对于客户端,使用Connect方法连接到服务端:

    IPAddress serverIP = IPAddress.Parse("127.0.0.1"); // 服务端的IP地址
    int port = 11000; // 服务端的端口号
    socket.Connect(new IPEndPoint(serverIP, port));
  7. 发送和接收数据: 一旦建立了连接,就可以使用SendReceive方法来发送和接收数据:

    byte[] buffer = Encoding.ASCII.GetBytes("Hello, World!");
    int bytesSent = socket.Send(buffer);byte[] receiveBuffer = new byte[1024];
    int bytesReceived = socket.Receive(receiveBuffer);
    string receivedText = Encoding.ASCII.GetString(receiveBuffer, 0, bytesReceived);
  8. 关闭Socket: 完成通信后,应该关闭Socket

    socket.Shutdown(SocketShutdown.Both);
    socket.Close();

C#中Socket通信常用的方法 

在C#中,使用System.Net.Sockets命名空间下的Socket类可以实现网络通信。以下是一些常用的方法和概念:

  1. 创建Socket

    • Socket(): 创建一个未绑定的套接字。
  2. 绑定Socket

    • Bind(IPAddress localAddress, int port): 将套接字绑定到本地IP地址和端口。
  3. 监听连接

    • Listen(int backlog): 开始监听传入连接请求,backlog参数指定等待队列中的最大连接数。
  4. 接受连接

    • Accept(): 接受传入的连接请求,返回一个新的套接字用于与客户端通信。
  5. 连接到服务端

    • Connect(IPAddress remoteAddress, int port): 客户端使用,连接到指定的IP地址和端口的服务端。
  6. 发送数据

    • Send(byte[] buffer, int size, SocketFlags flags): 向连接的远程主机发送数据。
    • SendTo(byte[] buffer, int size, SocketFlags flags, EndPoint remoteEP): 向指定的远程主机发送数据。
  7. 接收数据

    • Receive(byte[] buffer, int size, SocketFlags flags): 接收来自连接的远程主机的数据。
    • ReceiveFrom(byte[] buffer, int size, SocketFlags flags, ref EndPoint remoteEP): 从任何远程主机接收数据。
  8. 异步发送数据

    • BeginSend(byte[] buffer, int offset, int size, SocketFlags flags, AsyncCallback callback, object state): 开始异步发送数据。
  9. 异步接收数据

    • BeginReceive(byte[] buffer, int offset, int size, SocketFlags flags, AsyncCallback callback, object state): 开始异步接收数据。
  10. 关闭Socket

    • Close(): 关闭套接字。
    • Shutdown(SocketShutdown how): 禁用套接字的接收和/或发送操作。
  11. 错误处理

    • Poll(int microseconds, SelectMode mode): 检查套接字的状态。
    • Select(ICollection checkRead, ICollection checkWrite, ICollection checkError, int microSeconds): 检查一个或多个套接字是否有待处理的输入/输出/错误。
  12. 获取套接字选项

    • GetSocketOption(SocketOptionLevel level, SocketOptionName name): 获取套接字的选项值。
  13. 设置套接字选项

    • SetSocketOption(SocketOptionLevel level, SocketOptionName name, bool value): 设置套接字的选项。
  14. 获取和设置超时

    • SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, int timeout): 设置接收超时。
    • SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, int timeout): 设置发送超时。
  15. 获取和设置缓冲区大小

    • SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendBuffer, int size): 设置发送缓冲区大小。
    • SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveBuffer, int size): 设置接收缓冲区大小。
  16. 非阻塞模式

    • Blocking = false: 设置套接字为非阻塞模式。
  17. 处理连接的状态变化

    • Connected: 检查套接字是否已连接。
    • Disconnected: 检查套接字是否已断开连接。
  18. 获取远程和本地端点

    • RemoteEndPoint: 获取远程端点。
    • LocalEndPoint: 获取本地端点。

相关文章:

C#中Socket通信常用的方法

创建Socket 在C#中创建一个Socket对象的基本步骤如下: 引入命名空间: 首先,确保你的文件顶部包含了以下命名空间的引用: using System.Net; using System.Net.Sockets; 创建Socket实例: 你可以创建一个Socket实例&am…...

【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)

阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!希望本文内容能够帮助到你! 目录 一:单例模式(singleton) 1:概念 二:“饿汉模…...

huggingface实现中文文本分类

目录 1 自定义数据集 2 分词 2.1 重写collate_fn方法 3 用BertModel加载预训练模型 4 模型试算 5 定义下游任务 6 训练 7 测试 #导包 import torch from datasets import load_from_disk #用于加载本地磁盘的datasets文件 1 自定义数据集 #自定义数据集 #…...

基于python+控制台+txt文档实现学生成绩管理系统(含课程实训报告)

目录 第一章 需求分析 第二章 系统设计 2.1 系统功能结构 2.1.1 学生信息管理系统的七大模块 2.1.2 系统业务流程 2.2 系统开发必备环境 第三章 主函数设计 3.1 主函数界面运行效果图 3.2 主函数的业务流程 3.3 函数设计 第四章 详细设计及实现 4.1 学生信息录入模块的设计与实…...

Spring Boot 整合MyBatis-Plus 实现多层次树结构的异步加载功能

文章目录 1,前言2,什么是多层次树结构?3,异步加载的意义4,技术选型与实现思路5,具体案例5.1,项目结构5.2,项目配置(pom.xml)5.3,配置文件&#xf…...

网络工程师指南:防火墙配置与管理命令大全,零基础入门到精通,收藏这一篇就够了

本指南详细介绍了防火墙的配置与管理命令,涵盖了防火墙的工作原理、常见配置命令、安全策略与访问控制、日志管理与故障排查,并通过实战案例展示了如何有效防御网络攻击。通过学习本指南,网络工程师能够系统掌握防火墙的配置与管理技能&#…...

英特尔终于找到了Raptor Lake处理器崩溃与不稳定问题的根源

技术背景 在过去的几个月里,一些用户报告称他们的第13代和第14代Intel Core“Raptor Lake”处理器遇到了系统崩溃和不稳定的情况。这些问题最初在2024年7月底被英特尔识别出来,并且初步的诊断显示,这些问题与微码有关,该微码使CP…...

Shp2pb:Shapefile转Protocol Buffers的高效工具

Shp2pb是一个实用工具,专门用于将Shapefile(shp)格式转换为Protocol Buffers(protobuf)文件。这对于以更高效、更紧凑的方式处理地理数据特别有用。以下是关于如何安装和使用Shp2pb工具的详细说明,以及一个…...

Elasticsearch使用Easy-Es + RestHighLevelClient实现深度分页跳页

注意!!!博主只在测试环境试了一下,没有发到生产环境跑。因为代码还没写完客户说不用弄了( •̩̩̩̩_•̩̩̩̩ ) 也好,少个功能少点BUG 使用from size的时候发现存在max_result_window10000的限制&…...

基于ASRPRO的语音应答

做这个的起因是为了送女朋友,而且这东西本身很简单,所以在闲暇之余尝试了一下。 这个工程很简单,只通过对ASRPRO进行编程即可。 先看效果。(没有展示所有效果,后续会列出来所有对话触发) 语音助手示例1 语音助手示例2 代码部分使用天文Block编辑,找了一圈好像只…...

3D看车汽车案例,车模一键换皮肤,开关车门,轴距,电池功能

3D 汽车案例 网址: http://car.douchuanwei.com/...

数据结构-4.栈与队列

本篇博客给大家带来的是栈和队列的知识点, 其中包括两道面试OJ题 用队列实现栈 和 用栈实现队列. 文章专栏: Java-数据结构 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条, 如果分享不成功, 那我就会回你一下,那样你就分享成功啦. 你们的…...

芝士AI写作有什么特色? 大模型支撑,智能改写续写,让写作更轻松

又到了一年的毕业季,大学四年眨眼间匆匆就过去了,毕业,求职,考研,工作,升学,但是在这之前,我们必须要完成论文的写作,这也是每一位大学生都必须要面对~ 芝士AI官网&…...

【计网】从零开始学习http协议 --- http的请求与应答

如果你不能飞,那就跑; 如果跑不动,那就走; 实在走不了,那就爬。 无论做什么,你都要勇往直前。 --- 马丁路德金 --- 从零开始学习http协议 1 什么是http协议2 认识URL3 http的请求和应答3.1 服务端设计…...

记录linux环境下搭建本地MQTT服务器实现mqtt的ssl加密通讯

1、ubuntu安装mosquitto sudo apt-get update//安装服务端 sudo apt-get install mosquitto//安装客户端 sudo apt-get install mosquitto-clients 2、安装openssl 3、mqtts/tls加密传输 mosquitto原生支持了TLS加密,TLS(传输层安全)是SSL&…...

基于python+django+vue的电影数据分析及可视化系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…...

HJ50-四则运算:栈的运用、中缀表达式转后缀表达式并计算结果

文章目录 题目一、分析1.1表达式预处理1.2中缀表达式转后缀1.3 后缀表达式计算结果 二、答案 题目 一、分析 通过利用栈将中缀表达式转换为后缀表达式,在根据后缀表达式计算运算结果。由于包含负数操作数的情况,并且操作数位数不固定为1,因此…...

C++编程:实现简单的高精度时间日志记录小程序

0. 概述 为了检查是否存在系统时间跳变,本文使用C实现了一个简单的高精度时间日志记录小程序。该程序能够每隔指定时间(默认40毫秒)记录一次系统时间到文件中,并具备以下功能: 自定义时间间隔和文件名:通…...

QQ机器人搭建

使用QQ官方机器人Python SDK和三方框架搭建QQ群聊机器人 文章目录 使用QQ官方机器人Python SDK和三方框架搭建QQ群聊机器人前言编写机器人代码机器人监听群聊进行文字回复机器人监听群聊进行图片回复机器人监听群聊进行文件发送机器人监听群聊进行视频发送机器人监听群聊进行语…...

flink设置保存点和恢复保存点

增加了hdfs package com.qyt;import org.apache.flink.api.java.functions.KeySelector; import org.apache.flink.api.java.tuple.Tuple2;import org.apache.flink.runtime.state.storage.FileSystemCheckpointStorage;import org.apache.flink.streaming.api.datastream.Dat…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...