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);
    
            // 绑定Socket
            serverSocket.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属性进行设置,以实现更灵活和可靠的数据传输。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Lua学习笔记】Lua进阶——协程

文章目录 协程协程的定义和调度wrap StatusRunning补充 协程与主程的数据交互——return...yield 协程 协程是一种并发操作,相比于线程,线程在执行时往往是并行的,并且线程在创建销毁执行时极其消耗资源,并且过长的执行时间会造成…

统一观测|借助 Prometheus 监控 ClickHouse 数据库

引言 ClickHouse 作为用于联机分析(OLAP)的列式数据库管理系统(DBMS), 最核心的特点是极致压缩率和极速查询性能。同时,ClickHouse 支持 SQL 查询,在基于大宽表的聚合分析查询场景下展现出优异的性能。因此,获得了广泛的应用。本文旨在分享阿…

CentOS7.3 安装 docker

亲测、截图 阿里云服务器 文章目录 更新源2345 启动开机自启 更新源 sudo yum update -y2 sudo yum install -y yum-utils device-mapper-persistent-data lvm23 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo4 sudo yum …

计数排序算法

计数排序 计数排序说明: 计数排序(Counting Sort)是一种非比较性的排序算法,它通过统计元素出现的次数,然后根据元素出现的次数将元素排列在正确的位置上,从而实现排序。计数排序适用于非负整数或者具有确…

算法综合篇专题一:双指针问题

"就算没有看清那株灿烂的花蕊&#xff0c;也应该放声歌颂赞美鲜红的玫瑰" 1、移动零 (1) 题目解析 (2) 算法原理 class Solution { public:void moveZeroes(vector<int>& nums) {for(int cur0,dest-1;cur<nums.size();cur){if(nums[cu…

保姆级秋招教程之简历篇

大家好&#xff0c;我是千寻哥&#xff0c;个人简历在程序员求职过程中扮演着至关重要的角色。 今天我将详细给大家介绍一下写简历的必备要素和布局&#xff0c;同时强调应避免的“坑”&#xff01; 希望能通过这些技巧&#xff0c;能帮助程序员打造一份出色的简历&#xff0c;…

WEB:mfw

背景知识 Git泄露 Githack使用 命令执行漏洞 题目 这里页面里有Git&#xff0c;猜测是Git泄露 先用dirsearch扫一下 确实存在.git目录&#xff0c;可以尝试访问一下 使用Githack来下载并恢复.git文件 这里记得使用的时候关闭杀毒软件 结果会自动保存 点进去先看一下flag这个…

【前端知识】React 基础巩固(四十二)——React Hooks的介绍

React 基础巩固(四十二)——React Hooks的介绍 一、为什么需要Hook? Hook 是 React 16.8 的新增特性&#xff0c;它可以让我们在不编写class的情况下使用state以及其他的React特性&#xff08;比如生命周期&#xff09;。 class组件 VS 函数式组件&#xff1a; class的优势…

【机器学习】Feature scaling and Learning Rate (Multi-variable)

Feature scaling and Learning Rate 1、数据集2、学习率2.1 α \alpha α 9.9e-72.2 α \alpha α 9e-72.3 α \alpha α 1e-7 3、特征缩放3.1 特征缩放的原因3.2 Z-score 归一化3.3 预测3.4 损失等值线 导入所需的库 import numpy as np np.set_printoptions(precision…

为Win12做准备?微软Win11 23H2将集成AI助手:GPT4免费用

微软日前确认今年4季度推出Win11 23H2&#xff0c;这是Win11第二个年度更新。 Win11 23H2具体有哪些功能升级&#xff0c;现在还不好说&#xff0c;但它会集成微软的Copilot&#xff0c;它很容易让人想到多年前的“曲别针”助手&#xff0c;但这次是AI技术加持的&#xff0c;Co…

在k8s集群内搭建Prometheus监控平台

基本架构 Prometheus由SoundCloud发布&#xff0c;是一套由go语言开发的开源的监控&报警&时间序列数据库的组合。 Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态&#xff0c;任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的…

Linux上定位线上CPU飙高

【模拟场景】 写一个java main函数&#xff0c;死循环打印 System.out.println(“111111”) &#xff0c; 将其打成jar包放在linux中执行 1、通过TOP命令找到CPU耗用最厉害的那个进程的PID 2、top -H -p 进程PID 找到进程下的所有线程 可以看到 pid 为 94384的线程耗用cpu …

UM2080F32——32位SoC芯片

UM2080F32是基于ARM Cortex-M0内核的超低功耗、高性能的、单片集成(G)FSK/OOK无线收发机的32位SoC芯片。工作于200MHz~960MHz范围内&#xff0c;支持灵活可设的数据包格式&#xff0c;支持自动应答和自动重发功能&#xff0c;支持跳频操作&#xff0c;支持FEC功能&#xff0c;同…

BugKu CTF(杂项篇MISC)—社工-进阶收集

BugKu CTF(杂项篇MISC)—社工-进阶收集 提 示: flag{小美小区名字拼音} 描 述: 小明当年为了追求小美想尽办法获得小美的地址。直到有一天小美发了一条说说&#xff0c;小明觉得希望来了。(实战改编题&#xff0c;难度降低了。) [外链图片转存失败,源站可能有防盗链机制,建议…

yolov3-tiny原理解析及代码分析

前言 从去年十一月份开始学习yolo神经网络用于目标识别的硬件实现&#xff0c;到现在已经六个月了。一个硬件工程师&#xff0c;C/C基础都差劲的很&#xff0c;对照着darknet作者的源码和网上东拼西凑的原理讲解&#xff0c;一点一点地摸索。刚开始进度很慢&#xff0c;每天都…

pytorch学习——模型选择

一.概念 模型选择是机器学习中的重要环节&#xff0c;它涉及到从各种统计&#xff0c;机器学习或深度学习模型中选取最佳模型的过程。这涉及到许多关键概念&#xff0c;包括偏差与方差&#xff0c;过拟合与欠拟合&#xff0c;训练误差和泛化误差&#xff0c;交叉验证&#xff0…

【计算机网络】传输层协议 -- TCP协议

文章目录 1. TCP协议的引入2. TCP协议的特点3. TCP协议格式3.1 序号与确认序号3.2 发送缓冲区与接收缓冲区3.3 窗口大小3.4 六个标志位 4. 确认应答机制5. 超时重传机制6. 连接管理机制6.1 三次握手6.2 四次挥手 7. 流量控制8. 滑动窗口9. 拥塞控制10. 延迟应答11. 捎带应答12.…

Inkscape 1.3 版开放源代码 SVG 编辑器发布,新增形状生成器工具和许多更改

导读Inkscape 是功能强大的开源、跨平台、免费 SVG&#xff08;可缩放矢量图形&#xff09;编辑器&#xff0c;今天已更新到稳定的 1.3 版&#xff0c;这是一个引入新功能和许多改进的重要版本。 Inkscape 1.3 是在 Inkscape 1.2 发布一年零两个月后推出的&#xff0c;它引入了…

python-网络爬虫.regular

regular 正则表达式 (regular expression) 正则表达式(regular expression)描述了一种字符串匹配的模式 &#xff08;pattern&#xff09;&#xff0c; 可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串 中取出符合某个条件的子串等。 正则表达式是由普通…

学C的第三十一天【通讯录的实现】

相关代码gitee自取&#xff1a;C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第三十天【自定义类型&#xff1a;结构体、枚举、联合】_高高的胖子的博客-CSDN博客 通讯录需求&#xff1a; 实现一个通讯录&#xff0c; 通讯录中存放保存人的信息&#xff1…