草庐IT

C#教程 socket编程

qq_40793198 2023-10-25 原文

C#教程 socket编程

编程需要恒心和毅力,最主要的是要有信心,循序渐进的完成任务。

一、socket类用于网络通信
命名空间System.Net.Sockets,完整的类引用System.Net.Sockets.Socket。Socket类支持各种网络协议。
二、简单的控制台程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplicationSocket01
{
    class Program
    {
        static void Main(string[] args)
        {

        }
    }
}

三、添加socket变量

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
namespace ConsoleApplicationSocket01
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket UnitySocketServer=
new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
            
        }
    }
}

然后bind服务器主机的 IP地址:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;

namespace ConsoleApplicationSocket01
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket UnitySocketServer=
new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
            IPAddress HostIpAddress = IPAddress.Parse("127.0.0.1");
            UnitySocketServer.Bind(new IPEndPoint(HostIpAddress,5600));

    }
}

四、让socket接收数据
UnitySocketServer.Receive();Receive()方法用于接收传入的数据,该方法有多个重载版本。
先定义接收数据的数组BytesOfReceived,然后调用Receive()接收数据

static void Main(string[] args)
        {
            Byte[] BytesOfReceived=new Byte[512];
            Socket UnitySocketServer=
new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
            IPAddress HostIpAddress = IPAddress.Parse("127.0.0.1");
            UnitySocketServer.Bind(new IPEndPoint(HostIpAddress,5600));
            UnitySocketServer.Receive(BytesOfReceived);
}

当然,上面的程序会存在很多问题,下面进行修正。先将Receive()放入无限循环结构,使socket不停的接收消息:

static void Main(string[] args)
        {
            Byte[] BytesOfReceived=new Byte[512];
            Socket UnitySocketServer=
new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
            IPAddress HostIpAddress = IPAddress.Parse("127.0.0.1");
            UnitySocketServer.Bind(new IPEndPoint(HostIpAddress,5600));
            while(true){
                UnitySocketServer.Receive(BytesOfReceived);
            }

接下来,继续修正,先判断每次循环是否接收到消息,如果接收到消息就显示它。Receive()方法会返回接收的数据长度,我们要利用这个值。

static void Main(string[] args)
        {
            Byte[] BytesOfReceived=new Byte[512];
            Socket UnitySocketServer=
new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
            IPAddress HostIpAddress = IPAddress.Parse("127.0.0.1");
            UnitySocketServer.Bind(new IPEndPoint(HostIpAddress,5600));
            while(true){
                int NumOfReceived=0;
                NumOfReceived=UnitySocketServer.Receive(BytesOfReceived);
                if(NumOfReceived>0){
                    Console.Write(Console.Write(Encoding.UTF8.GetString(BytesOfReceived)););
                }
            }

到此,该程序具有了基本功能,接下来可以测试它。
五、为了测试以上程序,我们再次创建控制台程序,这次创建的程序是客户端程序。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;

namespace ConsoleApplicationSocketClient01
{
    class Program
    {
        static void Main(string[] args)
        {
            Byte[] BytesOfSended =Encoding.UTF8.GetBytes("whtskjdkjfg");
            Socket UnitySocketClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            IPAddress HostIpAddress = IPAddress.Parse("127.0.0.1");
            UnitySocketClient.Bind(new IPEndPoint(HostIpAddress, 5601));
           while(true){
                int NumOfReceived = 0;
                NumOfReceived = UnitySocketClient.SendTo(BytesOfSended, new IPEndPoint(HostIpAddress, 5600));
                
           }

        }
    }
}

六、按Ctrl+F5,运行上面的两个程序。发现运行良好。
七、可以在此基础上做进一步的修正,以完成其他功能。

有关C#教程 socket编程的更多相关文章

  1. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  2. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  3. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  4. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  5. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  6. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  7. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  8. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  9. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  10. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

随机推荐