C#Socket通信基础方法知识整理

2023-10-30

 一、IP地址操作类

    1、IPAddress

    a、在该类中有一个 Parse()方法,可以把点分的十进制IP表示转化成IPAddress类,方法如下:

    IPAddress address =IPAddress.Parse(“192.168.0.1”);

    b、IPAddress提供4个只读字段

    Any 用于代表本地系统可用的任何IP地址

    Broadcase 用于代表本地网络的IP广播地址

   Loopback 用于代表系统的回送地址

None 用于代表系统上没有网络接口

    其中IPAddress.Any最常用可以用来表示本机上所有的IP地址,这对于socket服务进行侦听时,最方便使用,不用对每个IP进行侦听了。

    而IPAddress.Broadcase可用来UDP的IP广播,这些具体讲socket时再详细介绍。

    2、IPEndPoint

    我们可以通过二种构造方法来创建IPEndPoint类:

    a、IPEndPoint(long address, int port)

   b、IPEndPoint(IPAddressaddress, int port)

    四个属性:Address 、AddressFamily、 Port 、MaxPort、MinPort

这些应该从名字上就很好理解,不再一一介绍。IPEndPoint其实就是一个IP地址和端口的绑定,可以代表一个服务,用来Socket通讯。二、DNS相关类

    DNS类有四个静态方法,来获取主机DNS相关信息,

    1、GetHostName()

    通过Dns.GetHostName()可以获得本地计算机的主机名

    2、GetHostByName()

    根据主机名称,返回一个IPHostEntry 对象:

   IPHostEntry GetHostByName(string hostName)

    其中IPHostEntry把一个DNS主机名与一个别名和IP地址的数组相关联,包含三个属性: AddressList:一个IPAddress对象的 数组 、Aliases:一个字符串对象数组、HostName:一个用于主机名的字符串对象

    3、GetHostByAddress()

    类似于GetHostByName(),只不过这里的参数是IP地址,而不是主机名,也返回一个IPHostEntry对象。

   IPHostEntry GetHostByAddress(IPAddress address)

   IPHostEntry GetHostByAddress(string address)

    4、Resolve()

    当我们不知道输入的远程主机的地址是哪种格式时(主机名或IP地址),用以上的二种方法来实现,我们可能还要通过判断客户输入的格式,才能正确使用,但Dns类提供

    一更简单的方法Resolve(),该方法可以接受或者是主机名格式或者是IP地址格式的任何一种地址,并返回IPHostEntry对象。

三、Socket编程

    对于Socket编程我们通常按照下面的步骤来进行:

    A、服务端

    1、创建IPEndPoint实例,用于Socket侦听时绑定

   IPEndPoint ipep = newIPEndPoint(IPAddress.Any, 6001);

    2、创建套接字实例

   mServerSocket = newSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    3、将套接字和IPEndPoint绑定

   mServerSocket.Bind(ipep);

    4、设置套接字为收听模式

   mServerSocket.Listen(10);

   5、接收客户端的连接并开启一个线程来接收数据

   while (true)           

   {

   try   

   {                   

   mClientSocket = mServerSocket.Accept();                   

   mClientThread = newThread(ReceiveData);                   

    mClientThread.Start();               

    }

    catch (Exception e)               

    {                   

    Console.WriteLine("Socket通讯出现异常错误:" + e.Message);               }           

    }

    其中,接受数据的方法ReceiveData()定义如下:

///<summary>///接受客户端数据的方法       

///</summary>///<returns></returns>

private staticvoid ReceiveData()       

{           

bool keepActive =true; //客户端Socket           

Socket mSocket =mClientSocket; //缓冲区大小           

Byte[] buffer =new Byte[1024]; //获取客户端信息           

IPEndPointClientipep = (IPEndPoint)mClientSocket.RemoteEndPoint; //输出客户端信息          

Console.WriteLine("[系统]:客户端" + Clientipep.Address +":" + Clientipep.Port + "加入连接");//等待客户端响应            while (keepActive)

 {

try

{

//获取数据大小

mLength =mSocket.Available;

//接受数据

 mSocket.Receive(buffer, 0, mLength,SocketFlags.None); //判断数据是否读取完毕                   

if (mLength == 0)continue;               

}               

catch (Exceptione)               

{                   

Console.WriteLine("读取数据出现异常:" + e.Message);               

}                //输出客户端消息                Console.WriteLine("[客户端]:"+ Encoding.Unicode.GetString(buffer).ToString());

 发送数据的方法代码如下:

//向客户端发送数据               

byte[] data = newbyte[1024];               

data =Encoding.Unicode.GetBytes("服务器收到!");               

mSocket.Send(data,data.Length, SocketFlags.None);

    B、客户端

    和服务器端类似,直接给出代码:

IPEndPoint ipep =new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6001);           

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

try           

{               

mClientSocket.Connect(ipep);               

if(mClientSocket.Connected)               

{                  

 Console.WriteLine("[系统]:客户端已连接到服务器端,开始向服务器发送数据");                  

 Console.WriteLine("[客户端]:我是客户端" + ipep.Address + ":"+ ipep.Port + "我正在向服务器发送数据");                    //向服务器发送数据                   

byte[] data = newbyte[1024];                   

data =Encoding.Unicode.GetBytes("你好,服务器端,我是客户端");                   

mClientSocket.Send(data,data.Length, SocketFlags.None); //提示用户等待服务器响应                  

 Console.WriteLine("[系统]:等待服务器响应......");                   

while (true)                   

{                       

mLength = 0;                       

try                       

{                           

mLength =mClientSocket.Available;                          

 mClientSocket.Receive(mData, mLength,SocketFlags.None);                           

if (mLength ==0)                               

continue;                        

}                       

catch (Exceptione)                       

{                           

Console.Write("读取服务器数据失败:" + e.Message);                          

 return;                       

}                       

Console.WriteLine("[服务器]:"+Encoding.Unicode.GetString(mData).Substring(0,mLength).ToString());                   

}               

}           

}           

catch (Exceptione)           

{              

 Console.WriteLine("连接到服务器失败:" + e.Message);               

return;           

}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#Socket通信基础方法知识整理 的相关文章

  • npm查看一个包的版本信息

    我们npm install安装一个包之后 怎么查看这个包的版本信息呢 过一段时间之后 如何查看这个包最新的版本信息呢 下面将做一个全面的总结 1 查看项目中安装的所有的包 npm list 结果如下 vue2 0 test 0 1 0 C
  • scrapy 最简易爬虫

    创建一个项目 scrapy startproject baidu 这后面是名字 运行项目 要cd 进入项目才可以运行 scrapy crawl baidu import scrapy from bs4 import BeautifulSou
  • 关于OSB执行管道outbound的Content-Type自动添加charset=utf-8解决办法

    一 问题描述 在执行Content Type application x www form urlencoded类型的接口的管道时outbound自动添加charset utf 8 如下图所示 二 解决办法 将所有服务器都停掉 1 打补丁
  • 海康rtsp抓包分析

    海康h264 rtp rtsp rtcp包分析 1 DESCRIBE rtsp 192 168 0 186 554 mpeg4 ch01 main av stream RTSP 1 0 CSeq 0 Accept application s
  • 计算机经典书籍2

    推荐度参考 6分 可看可不看 7分 值得一读 8分 经典好书 9分 强烈推荐 10分 神品级 C语言类 C程序设计语言 推荐度 8分 书籍简介 在计算机发展的历史上 没有哪一种程序设计语言像C语言这样应用广泛 本书原著即为C语言的设计者之一
  • 1896-2021历届奥运会奖牌榜(Python数据处理)

    阅读本文大约需要 3 分钟 摘 要 这两天在平台上看到一些创作者失去创作动力的感慨 OF只想说往事如昙花一现 我们都需要时刻静下心来 认真地考虑下自己的创作目标并付诸行动 遥想当年OF做软件系统的时候 开源社区还没有像现在这样健全 再看看如
  • 多模态交互的概念与现状

    一 多模态概念 所谓 模态 英文是modality 用通俗的话说 就是 感官 多模态即将多种感官融合 目前的人机智能交互比如语言控制不如屏幕控制那么精准 很多时候会误判指令和错误唤醒 比较语言充满了不确定性 再比如 语音交互的物联网设备还是
  • linux 网络编程socket

    前言 socket 套接字 是linux下进程间通信的一种方式 通常使用C S 客户端 服务端 的方式通信 它可以是同一主机下的不同进程间通信或者不同主机的进程通信 socket是夹在应用层和TCP UDP协议层间的软件抽象 向应用层开发人
  • (简单易记版)考研复试英语自我介绍

    Good morning teachers I am very glad to be able to attend this interview First let me introduce myself my name is xxx 24
  • 当出现raise NotImplementedError报错

    class LeNet5 nn Module def init self super LeNet5 self init 定义卷积层 self conv nn Sequential nn Conv2d in channels 1 out ch
  • 【FreeRTOS学习计划】 第八节 任务延时列表的实现

    在本节之前 为了实现任务的阻塞延时 在任务控制块中内置了一个延时变量xTicksToDelay 每当任务需要延时的时候 就初始化 xTicksToDelay 需要延时的时间 然后将任务挂起 这里的挂起只是将任务在优先级位图表 uxTopRe
  • 关于‘try-with-resources‘的问题

    开发中在使用读写流的时候会遇到一个问题 try 通过输入流读取文件内容 FileInputStream警告try with resources FileInputStream inputStream new FileInputStream
  • window.opener 的用法

    window opener 实际上就是通过window open打开的窗体的父窗体 比如在父窗体parentForm里面 通过 window open subForm html 那么在subform html中 window opener
  • 匹配算法,角点介绍

    https www zhangshengrong com p wrad8o2EaB Harris角点 以一点为中心 画一个窗口 让该窗口在该点周围移动 看灰度值是否有变化 有变化证明是角点 该cost可以表达为 2 2 2 2次函数可以看作
  • SynchroTrap-基于松散行为相似度的欺诈账户检测算法

    大家好 我是小伍哥 今天给大家分享一个非常牛逼的算法 叫做SynchroTrap 有问题可以加我一起交流 一 极致对抗下的风控怎么做 为了好理解 以淘宝刷单为例 各阶段为假设 本人并未做过刷单的风控 第一阶段 同设备 同地址 大量购买 第二
  • 软件设计师(十)网络与信息安全基础知识

    计算机网络是由多台计算机组成的系统 与传统的单机系统 多机系统相比有很大的区别 一 网络概述 计算机网络是计算机技术与通信技术相结合的产物 它实现了远程通信 远程信息处理和资源共享 1 计算机网络的概念 计算机网络的定义是利用通信设备和线路

随机推荐

  • 三种主流的Web服务实现方案(REST+SOAP+XML-RPC)简述及比较

    目前知道的三种主流的Web服务实现方案为 REST 表象化状态转变 软件架构风格 SOAP 简单对象访问协议 XML RPC 远程过程调用协议 下面分别作简单介绍 REST 表征状态转移 Representational State Tra
  • GIT本地代码处于detached HEAD的情况(又称游离状态)的解决办法

    有时候git由于一些操作的问题出现了detached HEAD 的情况 对于新手来说很焦急 但又不敢动 生怕搞错点什么把劳动成果付之东流 下面的解决办法要顺序执行 先 git commit 进行提交 提交完你的本地分支指向的是你刚commi
  • FM33G0XX-创建一个KEIL工程的步骤

    1 说明 本文章为 FM33G 系列低功耗 MCU 创建 keil 工程 FM33G0XX 系列是复旦微电子 公司开发的低功耗 MCU 芯片 2 创建一个 keil 工程的步骤 2 1 新建功能文件夹 这里我们建立一个文件夹为 Templa
  • Ethereum以太坊区块链底层换用国密算法实验报告

    区块链技术的基础是计算机密码学 可以说 没有计算机密码学 就没有区块链技术 区块链在如下方面用到了计算机密码学 验证签名 保证交易发起的真实性 用到了ECDSA 哈希校验区块完整性 保证不可篡改特性 用到了hash算法 以太坊中具体用到sh
  • 一个java文件中是否可以定义多个类

    title 一个java文件中是否可以定义多个类 date 2017 12 31 1 53 43 tags Java基础 基本概念 categories Java基础 一个java文件中可以定义多个类 但是最多只有一个类被public修饰
  • 如何在宝塔面板中使用小皮面板的数据库(mysql)

    1 关闭mysql service mysqld stop 2 查看是否有僵尸进程残留 ps ef grep mysqld 如果存在 则杀掉进程 kill quit 进程号 或者 kill 9 进程号 3 复制小皮面板的mysql 的 da
  • 一款新的网页设计工具,简单好用

    之前一直在找一些智能化的 简单操作的网页设计工具 后来发现这个VXPLO 还蛮好用的 使用地址http www vxplo cn VXPLO是互联网上出现的第一款基于云计算方式的交互式网页设计工具 也是一个互动作品分享平台 大家需要网页设计
  • 蓝桥杯:火星人(全排列模板) Java

    import java util ArrayList import java util Arrays import java util LinkedList import java util List import java util Sc
  • Python编程题

    1 输入直角三角形的两个直角边的长度a b 求斜边c的长度 from math import sqrt 从math库中导入sqrt方法 a eval input 输入直角边a的长度 b eval input 输入直角边b的长度 c sqrt
  • Python FastAPI上传文件至七牛云

    最近需要给博客添加上传图片的功能 之前有图片上传的 上传主题图片的 考虑到博客的话图片太多就不存到服务器了 存到七牛云上比较好 相关的图片服务也比较多 我的上传流程是 前端上传图片至服务器 服务器在上传到七牛云 我的后台使用的是Python
  • linux系统的宝塔面板密码忘记了?用户名忘记了?访问地址忘记了?安全入口忘记了?宝塔服务是否已开启?以下是解决方法!修改密码、修改用户名、修改访问端口、修改安全入口等等!

    宝塔面板 在Linux系统下 宝塔面板 BT Panel 可以帮助用户简化服务器的管理和配置 宝塔面板适用于多个Linux发行版 如CentOS Ubuntu等 并提供了图形化的界面 使得用户可以通过简单的点击和配置来完成各种操作 使用宝塔
  • VS2017 创建动态链接库并使用

    下面我们直接步入正题 1 首先在VS2017中新建Dll项目 2 组织你的项目工程目录如下 3 其中 MyDll h文件中的代码为 pragma once ifdef MY DLL EXPORTS define MY DLL EXP dec
  • redis打开若依前端出现端口错误无法显示验证码

    解决方案 由深到表 1 redis服务没有开 箭头朝下 2 redis cli没有开 箭头朝下 3 redis cli打开后报错及解决 我出现的问题是自己在这两个文件设置了密码 但是没有输入导致无法连接 可以去查下如何在文件内设置redis
  • paramiko的两种简单用法,sftp上传下载,执行服务器cmd

    注 1 安装paramiko之前需要安装pycrypto 2 需要服务端添加你的公钥权限你才能使用对应的私钥 1 上传下载文件 import paramiko privatekeyfile 私钥的地址 mykey paramiko RSAK
  • 软件测试综述-软件开发过程

    1 软件产品构成的主要部分 1 客户需求 2 产品说明书 3 进度表 4 软件设计文档 包括 结构文档 数据流图 状态转换图 流程图 代码注释等 5 测试文档 包括 测试计划 测试用例 缺陷报告 测试工具和自动测试 质量 统计和总结 2 软
  • POJ-1416 Shredding Company(DFS)

    题目链接 点击打开链接 大致题意 公司现在要发明一种新的碎纸机 要求新的碎纸机能够把纸条上的数字切成最接近而不超过target值 比如 target的值是50 而纸条上的数字是12346 应该把数字切成四部分 分别是1 2 34 6 因为这
  • 推荐系统-基于用户的协同过滤(User-based CF)

    基于邻域的算法应该算是推荐系统中最基础的算法之一了 主要包括基于用户的协同过滤和基于物品的协同过滤 我觉得他们是最符合直觉的推荐算法了 你想想看 如果给你若干人的行为数据 你怎么去做推荐 一个就是找到和他最相似的用户 因为他们臭味相投 所以
  • SpringCloud之Eureka的报错(版本神坑)

    一 报错内容 2021 09 12 14 47 53 594 INFO 20640 freshExecutor 0 com netflix discovery DiscoveryClient Disable delta property f
  • springboot如何实现短信验证注册和短信验证码登录

    Spring Boot实现短信验证注册和短信验证码登录的步骤如下 1 集成短信服务 选择一个短信服务商 例如阿里云 腾讯云等 并集成该服务商提供的API 2 实现短信发送接口 编写一个短信发送的接口 该接口需要传入手机号并发送短信验证码到该
  • C#Socket通信基础方法知识整理

    一 IP地址操作类 1 IPAddress类 a 在该类中有一个 Parse 方法 可以把点分的十进制IP表示转化成IPAddress类 方法如下 IPAddress address IPAddress Parse 192 168 0 1