C# Socket实际应用案例与属性详解

引言
Socket是一个在网络编程中非常常见和重要的概念,它提供了一种通信机制,使不同的计算机之间可以进行数据传输。本文将介绍C#中Socket的实际应用案例,并对Socket的常用属性进行详细解析。

文章目录

    • 1. Socket的实际应用案例
    • 2. Socket的属性详解
    • 3. 示例代码解析

在这里插入图片描述

1. Socket的实际应用案例

以一个简单的实时聊天应用为例,介绍Socket在实际应用中的使用场景和功能。

  • 服务端代码:

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;class Server
    {static void Main(string[] args){// 创建Socket对象Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);// 绑定SocketserverSocket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888));// 监听连接serverSocket.Listen(10);// 接受连接Socket clientSocket = serverSocket.Accept();// 发送和接收数据byte[] dataBuffer = new byte[1024];int bytesRead = clientSocket.Receive(dataBuffer);string receivedData = Encoding.ASCII.GetString(dataBuffer, 0, bytesRead);Console.WriteLine("Received Data: " + receivedData);byte[] sendData = Encoding.ASCII.GetBytes("Hello client!");clientSocket.Send(sendData);// 关闭连接clientSocket.Close();serverSocket.Close();}
    }
    
  • 客户端代码:

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;class Client
    {static void Main(string[] args){// 创建Socket对象Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);// 连接服务端clientSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888));// 发送和接收数据byte[] sendData = Encoding.ASCII.GetBytes("Hello server!");clientSocket.Send(sendData);byte[] dataBuffer = new byte[1024];int bytesRead = clientSocket.Receive(dataBuffer);string receivedData = Encoding.ASCII.GetString(dataBuffer, 0, bytesRead);Console.WriteLine("Received Data: " + receivedData);// 关闭连接clientSocket.Close();}
    }
    

2. Socket的属性详解

介绍Socket类的各种属性,并解析其用法和作用。

  • LocalEndPoint:获取本地端点的信息,包括IP地址和端口号。在服务端中,使用此属性获取绑定的本地端点信息。
  • RemoteEndPoint:获取远程端点的信息,包括IP地址和端口号。在客户端中,使用此属性获取已连接的服务器端点信息。
  • AddressFamily:获取或设置套接字的地址族。常用的是AddressFamily.InterNetwork表示IPv4地址族。
  • SocketType:获取或设置套接字的类型。常用的是SocketType.Stream表示流式套接字。
  • ProtocolType:获取或设置套接字的协议类型。常用的是ProtocolType.Tcp表示TCP协议。
  • Blocking:获取或设置一个Boolean值,指示套接字是否处于阻塞模式。可以通过此属性设置套接字为阻塞或非阻塞模式。
  • Available:获取从网络中可读取的字节数。可以通过此属性判断是否有可用的数据可接收。
  • SendTimeout:获取或设置发送操作的超时时间。可以通过此属性设置发送数据的超时时间,如果在指定时间内发送不成功,则会引发异常。
  • ReceiveTimeout:获取或设置接收操作的超时时间。可以通过此属性设置接收数据的超时时间,如果在指定时间内接收不到数据,则会引发异常。

3. 示例代码解析

解析上述客户端和服务端代码中使用的Socket属性。

  • 服务端代码解析:

    • Bind方法用于将Socket对象与本地IP地址和端口号绑定。
    • Listen方法开始监听客户端连接请求,参数指定允许的最大排队数。
    • Accept方法用于接受客户端的连接请求,并返回一个新的Socket对象,用于与客户端进行通信。
    • Receive方法用于接收客户端发送的数据,将数据读取到指定的缓冲区中。
    • Close方法用于关闭与客户端的连接。
  • 客户端代码解析:

    • Connect方法用于连接服务端,参数指定服务端的IP地址和端口号。
    • Send方法用于向服务端发送数据,将数据发送到指定的缓冲区中。
    • Receive方法用于接收服务端发送的数据,将数据读取到指定的缓冲区中。
    • Close方法用于关闭与服务端的连接。

结论
本文介绍了C#中Socket的实际应用案例,通过一个简单的实时聊天应用的示例,详细解析了Socket的常用属性及其使用方法。通过对Socket的理解和应用,可以在网络编程中实现各种通信需求。在实际应用中,我们可以根据具体的需求使用不同的Socket属性进行设置,以实现更灵活和可靠的数据传输。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/14374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python命令模式介绍、使用

一、Python命令模式介绍 Python命令模式(Command Pattern)是一种行为型设计模式,它允许将请求或操作封装在对象中,并将其作为参数传递给调用对象,以在不同的环境中执行相同的请求或操作。 功能: 将请求或…

SqlServer读写分离对等发布

SqlServer读写分离对等发布: 对等发布支持多主复制。发布服务器将事务流式传输到拓扑中的所有对等方。所有对等节点可以读取和写入更改,且所有更改将传播到拓扑中的所有节点。 注意点: 1.各服务器的数据库名字要保证一样。 2.发布名称必须保持一致。 3.各服务器必须都是…

【论文阅读】The Deep Learning Compiler: A Comprehensive Survey

论文来源:Li M , Liu Y , Liu X ,et al.The Deep Learning Compiler: A Comprehensive Survey[J]. 2020.DOI:10.1109/TPDS.2020.3030548. 这是一篇关于深度学习编译器的综述类文章。 什么是深度学习编译器 深度学习(Deep Learning)编译器将…

【Maven】让maven更高效,优化maven构建项目速度

打开idea的setting,找到maven,设置它多线程数,重启后即可! 我这里是8,你们可以随便设置。 如下图:

前端请求传输token到后端的两种方式

谈谈 cookie & session & jwt - 掘金 前端在每次请求时把token放在请求头中发送给后端,目前有两种方式: 一是通过cookie的形式,即把token放在cookie中,每次浏览器会自动帮我们带过去,不需要我们自己设置。 二…

flutter实战(01)windows桌面版 修改应用logo、名称、显示位置、显示大小

说明:该系列文章主要为flutter在windows桌面平台实战中遇到的一些坑。 1 修改logo 只需要在flutter项目/windows/runner/resources目录下替换原来的应用图标 app_icon.ico即可。 2 修改应用名称、显示位置、显示大小 修改flutter项目/windows/runner/main.cpp 文…

Github git clone 和 git push 特别慢的解决办法

1.在本地上使用 SSH 命令无法git push 上传 github 项目 2.使用 git clone 下载项目特别慢总是加载不了 解决办法1 将 *** 的连接模式换成:D-i-r-e-c-t(好像不太有用) 后面再找找能不能再G-l-o-b-a-l 下解决该问题 解决办法 2 mac下直接设…

自定义AOP记录请求日志

Aspect Component public class LogAspect {public LogAspect() {System.out.println("LogAspect");}private final static Logger LOG LoggerFactory.getLogger(LogAspect.class);/*** 定义一个切点 TODO 记得替换为自己项目的controller位置*/Pointcut("exec…

Spring Data【Spring Data Redis、Spring Data ElasticSearch】(二)-全面详解(学习总结---从入门到深化)

目录 四、 Spring Data Redis 五、 Spring Data ElasticSearch 四、 Spring Data Redis Redis 是一个基于内存的数据结构存储系统,它可以用作数据库或者缓存。它支持多种 类型的数据结构,这些数据结构类型分别为 String(字符串&#xff09…

lab3 attacklab

phase1 首先&#xff0c;通过这个指令生成前三个阶段要用到的ctarget的反汇编代码objdump -d ./ctarget >> target.s 其次&#xff0c;假设我们的输入文件是touch1.txt&#xff0c;那么运行这个指令就可以去验证是否是正确的./hex2raw <touch1.txt | ./ctarget -q 整…

MethodInterceptor

目录 1 MethodInterceptor 1.1 /// This will be called via Reflection 1.2 HandleAsync MethodInterceptor /// This will be called via Reflection /// </summary> /// <typeparam name"TResult"></typeparam> /// <param name"…

Flutter 开发者工具 Android Studio 开发Flutter应用

Flutter 开发者工具 在 Android Studio 开发Flutter应用 &#x1f525; Android Studio 版本更新 &#x1f525; Android Studio Check for Update Connection failed ​ 解决方案 如果是运行的是32位的android studio需要在andriod studio的启动目录下找到studio.exe.vmoptio…

WIZnet W5100S-EVB-Pico DHCP 配置教程(三)

DHCP协议介绍 什么是DHCP&#xff1f; 动态主机配置协议DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;是一种网络管理协议&#xff0c;用于集中对用户IP地址进行动态管理和配置。 DHCP于1993年10月成为标准协议&#xff0c;其前身是BOOTP协议。DHCP协议由…

Python批量下载主播照片,实现人脸识别, 进行颜值评分,制作颜值排行榜

昨晚一回家&#xff0c;表弟就神神秘秘的跟我说&#xff0c;发现一个高颜值网站&#xff0c;非要拉着我研究一下她们的颜值高低。 我心想&#xff0c;这还得要我一个个慢慢看&#xff0c;太麻烦了~ 于是反手用Python给他写了一个人脸识别代码&#xff0c;把她们的照片全部爬下…

【华为OD机试】 选修课

题目描述 现有两门选修课&#xff0c;每门选修课都有一部分学生选修&#xff0c;每个学生都有选修课的成绩&#xff0c;需要你找出同时选修了两门选修课的学生&#xff0c;先按照班级进行划分&#xff0c;班级编号小的先输出&#xff0c;每个班级按照两门选修课成绩和的降序排序…

【TiDB理论知识 07】SQL执行流程

一 DML语句读写流程 1 DML语句读流程概要 用户发出SQL 被协议层接收 Protocal Layer 通过PD获取时间戳 parse模块 解析SQL&#xff0c;通过词法解析 与 语法解析 生成AST语法树 编译SQL Compile模块 ,区分点查 与 非点查&#xff0c;生成执行计划 发送给Executor,从TIKV获…

AAOS 音频焦点请求

文章目录 前言基本概念提供给应用来获取音频焦点的apiAAOS中的音频焦点管理交互矩阵duck的实现流程AAOS 测试应用kitchensink焦点相关 前言 本文章的目标是首先了解Android中音频焦点的基本概念&#xff0c;理解代码中相关音频焦点的使用方法。其次理解AAOS 中相关交互矩阵概念…

[SQL挖掘机] - 字符串函数 - substring

介绍: substring函数是在mysql中用于提取字符串的一种函数。它接受一个字符串作为输入&#xff0c;并返回从该字符串中指定位置开始的一部分子串。substring函数可以用于获取字符串中的特定字符或子串&#xff0c;以便进行进一步的处理或分析。 用法: 下面是substring函数的…

【Linux】Centos的一些快捷操作

Centos的一些快捷操作 一个窗口多个终端GVIM 一个窗口多个文件 一个窗口多个终端 GVIM 一个窗口多个文件

Hadoop学习指南:探索大数据时代的重要组成——Hadoop概述

前言 在当今大数据时代&#xff0c;处理海量数据成为了一项关键任务。Hadoop作为一种开源的分布式计算框架&#xff0c;为大规模数据处理和存储提供了强大的解决方案。本文将介绍Hadoop的组成和其在大数据处理中的重要作用&#xff0c;让我们一同踏上学习Hadoop的旅程。 Hado…