精华内容
下载资源
问答
  • c#网络通信程序设计
    2022-04-29 20:08:37

    《C#网络编程技术教程》是一本系统介绍C#网络编程技术的教材,《C#网络编程技术教程》共11章,由两部分组成。第1部分(第1~5章)为基础知识,内容包括Visual C#.NET集成开发环境、C#语言的基础知识、面向对象的程序设计、C#的Windows编程方法、C#的常用数据类、网络编程的基本概念、网络套接字编程以及多线程编程的方法概述等。第2部分(第6~11章)介绍网络编程的几个常用领域,内容包括TCP/UDP编程、FTP编程、电子邮件协议编程、HTTP编程、Web Service编程以及密码术网络编程等。
      《C#网络编程技术教程》可作为高等院校计算机、网络工程、通信工程、信息安全等专业的教材,也可作为相关工程技术人员的参考用书。

    点击下载

    第1章 C#.NET概述
    1.1.NET平台介绍
    1.1.1 什么是.NET
    1.1.2.NET的核心组件
    1.1.3.NET的新特性
    1.1.4.NET框架
    1.2 C#语言简介
    1.2.1 C#的开发背景
    1.2.2 C#语言的特点
    1.2.3 C#与其他语言的比较
    1.3 VisualC#.NET集成开发环境
    1.3.1 启动界面
    1.3.2 解决方案资源管理器
    1.3.3 工具箱
    1.3.4 代码编辑窗口
    1.3.5 类视图
    1.3.6 属性窗口
    1.3.7 服务器资源管理窗口
    1.4 创建第一个C#.NET程序
    1.4.1 创建C#控制台应用程序
    1.4.2 创建C#窗体应用程序
    本章小结
    习题
    第2章 C#基础编程
    2.1 C#数据类型
    2.1.1 标识符与关键字
    2.1.2 值类型
    2.1.3 引用类型
    2.1.4 常量与变量
    2.1.5 数据类型之间的转换
    2.1.6 装箱与拆箱
    2.2 表达式与运算符

    更多相关内容
  • C#网络通信程序设计

    2018-03-19 23:29:21
    特色:技术性和编程方法的结合;实用性和趣味性融于一体
  • 阐述主机扫描、串口通信、TCP协议编程、UDP协议编程、木马程序、屏幕监视、IP语音网络通信、网络视频传输、Email协议编程、FTP协议编程、网络测量程序、网络信息加密传输和网络信息隐藏通信编程等原理、技术分析、...
  • ppt课件 ppt课件 ppt课件 ppt课件 ppt课件 ppt课件 ppt课件 ppt课件 ppt课件 C#网络通信程序设计 第3章 基于TCP协议的程序设计 * ppt课件 本章的主要内容 学习内容 1了解TCP协议的特点与数据包格式 2理解阻塞模式和...
  • c++ windows网络与通信程序设计pdf以及源码 ,六种网络通信模式,p2p核心实现,iocp网络服务器实现等等。
  • C#网络通信程序设计案例精讲》的配套代码。 \chap03 提供了本书第3章FTP服务器开发源程序; \chap04 提供了本书第4章第FTP客户端开发源程序; \chap05 提供了本书第5章电子邮箱系统源程序; \chap06 提供了...
  • 吴晨 陈建孝编著的C#网络通信案例精讲源码,包括游戏开发,Web Service,具体有:FTP服务器,客户端,电子邮箱客户端,基于Socket聊天室,多线程下载,基于Web的电子书店,网络游戏,基于HTTP协议的浏览器,Telnet...
  • C#程序设计.pdf

    2020-04-01 22:55:49
    C#宿舍管理系统教案
  • 网络通信程序设计(C#)全套教学课件.pptx
  • C#网络通信程序设计案例精讲源代码,对你很有帮助哦!
  • C#网络应用编程(第2版)PDF附源代码

    千次下载 热门讨论 2013-10-15 17:01:08
    C#网络应用编程 不管你是做B/S或C/S这本收非常值得一看,里面的和CP UDP P2P多线程,winform模拟提交表单等都讲了,非常的全,收获甚多.
  • C#网络通信系列心得体会 第一章、C#控制台网络通信&C#控制台socket通信C#网络通信系列心得体会前言一、Socket是什么?二、使用步骤1.引入库2.读入数据总结 前言 网络通信是很多码农入职的第一课,也是毕业...

    C#网络通信系列学习笔记



    前言

    网络通信是很多码农入职的第一课,也是毕业设计、课程设计上使用的重灾区,可以说不会网络通信的码农不是一个好码农。
    通过这篇文章,你将学习如何使用C#Socket库来进行通信。ok,我们先从最简单的控制台开始。


    一、Socket是什么?

    网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
    Socket的英文原义是“孔”或“插座”。作为BSD UNIX的 进程通信机制,取后一种意思。通常也称作" 套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的 主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原义那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。——C#Socket通信原理(基础篇)

    也就是说

    1. 网络上的两台主机要想完成通信需要两边都做好准备,这个准备工作可以由Socket来完成
    2. 一个socket需要占用一个本地计算机的端口
    3. 一台计算机上的不同软件可以与不同的远程计算机通信,他们之间是互不干扰的
    4. 一台计算机上的多个软件可能在与远程同一台计算机进行通信,但是它们用的端口是不同的,也就是两台主机之间可能存在着多个连接,尽管连接的对象都是一样的
    5. 我可以客户端和服务端都在一台主机上,自己跟自己玩~

    另外,网络通信是分为客户端模式和服务器模式的
    客户端模式:我需要连接到一个指定的IP地址和端口号,因此我必须知道对方的IP地址和端口号
    服务器模式:我不知道谁会连接我,因此我绑定一个固定端口随时监听它,等待客户端的连接请求。

    二、最简单的控制台通信

    1.客户端

    代码如下(示例):

    using System;
    using System.Text;
    using System.Net.Sockets;
    using System.Net;
    
    namespace ConsoleTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                //建立一个socket对象需要指定socket类型、协议类型等参数
                //这里第一个参数使用IPv4版本的地址,第二个参数指可靠稳定的字节流socket,第三个参数是采用TCP\协议
                Socket ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPAddress ServerIP = IPAddress.Parse("127.0.0.1");//将ip地址字符串转化为ip地址对象,这里以本地作为服务器
                //在Internet中,TCP/IP使用一个网络地址和一个服务端口号来唯一标识设备。网络地址标识网络上的特定设备;
                //端口号标识要连接到的该设备上的特定服务。网络地址和服务端口的组合称为终结点,
                //在.NET框架中正是由EndPoint类表示这个终结点,它提供表示网络资源或服务的抽象,用以标志网络地址等信息
                IPEndPoint endPoint = new IPEndPoint(ServerIP, 20000);//端口号可以自己设置,不要与其他程序冲突,与服务端保持一致就可以
                ClientSocket.Connect(endPoint);//连接到这个终结点,这里要注意如果连接不上是会报错的哦
                string MyMsg = "我要发送的数据";
                byte[] MsgByteArray = Encoding.UTF8.GetBytes(MyMsg);//文字信息是不能直接发送的,需要先转化为字节流
                int SendNum = ClientSocket.Send(MsgByteArray);//这里使用最简单的一种重载,直接发送字节数组
                if (SendNum <= 0)
                    Console.WriteLine("发送失败");
                else
                    Console.WriteLine("发送成功");
                ClientSocket.Blocking = true;//设置为阻塞模式,否则可能接收不到数据
                byte[] ReceiveMsgByteArray = new byte[1024];
                ClientSocket.Receive(ReceiveMsgByteArray);//接收返回的信息
                Console.WriteLine(Encoding.UTF8.GetString(ReceiveMsgByteArray));//将收到的字节流转换回字符串并打印
                Console.ReadLine();//这里读取一行输入,防止程序执行完闪退
                ClientSocket.Close();//关闭socket连接
            }
        }
    }
    
    

    在这个例子中我们只让它发送一条消息并接收一条消息就可以了,当然现在还是没办法胜任这个任务的,因为根本打不开连接呀~
    接下来我们在写一个服务端的控制台程序来跟它互动

    2.服务端

    代码如下(示例):

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                //IPAddress kehuip = IPAddress.Parse("0.0.0.0");
                IPAddress ClientIP = IPAddress.Any;//允许哪个地址连接我,这个值表示任意,与上面的表示形式相同
                Socket socketwatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint endPoint = new IPEndPoint(ClientIP, 20000);//监听20000端口,客户端连接的时候就需要连接这个端口号
                socketwatch.Bind(endPoint);//绑定这个终结点
                socketwatch.Listen(3);//开始监听,参数表示最大允许几台主机连接我
                Console.WriteLine("开始监听 端口号:20000 \r\n");
                Socket ClientSocket = socketwatch.Accept();//如果有客户端连接,就会返回这个客户端的sockeet对象
                ClientSocket.Blocking = true;
                byte[] ReceiveMsgByteArray = new byte[1024];
                ClientSocket.Receive(ReceiveMsgByteArray);//接收返回的信息
                Console.WriteLine(Encoding.UTF8.GetString(ReceiveMsgByteArray));//将收到的字节流转换回字符串并打印
                ClientSocket.Send(Encoding.UTF8.GetBytes("我收到了你的消息"));//礼尚往来,给客户端回一句
                Console.ReadLine();//这里读取一行输入,防止程序执行完闪退
                ClientSocket.Close();//关闭socket连接
            }
        }
    }
    
    

    3.执行

    先运行服务端的控制台程序

    在跑上客户端控制台
    在这里插入图片描述
    啪的一下很快啊,都没反应过来两边就都收到了并且运行结束了,我们给它加个延时直观一点。
    在这里插入图片描述
    服务端加上这两行断点处的代码
    在这里插入图片描述
    客户端加上这两行,按上述步骤再次执行
    在这里插入图片描述

    总结

    以上就是最简单的C#控制台网络通信的实例了,在下一章中,将 会在这个控制台的基础上修改为多次发送多次接收
    展开全文
  • C#网络编程TCP通信实例程序简单设计

    热门讨论 2017-04-25 17:54:40
    C#网络编程TCP通信实例程序简单设计 程序介绍和下载连接地址。。。https://www.cnblogs.com/JiYF/p/6699104.html 本站太贵了
  • C#网络通信程序设计案例精讲.rar
  • C#网络编程TCP通信实例
  • 网络通信程序设计(C)语言;第五章 字符串与字符编码;5.1 String类;常用字符串操作方法;常用字符串操作方法;5.2 StringBuilder类;5.3 字符集与字符编码;ASCII码表;Encoding类;字符与字符编码的转换;5.4 字节(数组)...
  • C#程序设计-3期(KC008) KC008110100027-如何让网络通信代码更强壮.docx 学习资料 复习资料 教学资源
  • Visual C#程序设计

    2018-09-20 13:57:52
    全书共17章,内容包括流程控制语句、类与对象 、继承与多态、委托与事件、数组与集合、泛型、反射、字符串操作、文件与流、多线程编程、Windows窗体与控件设计、数据库编程、网络通信编程、异步编程等。本书的代码...
  • C#网络应用编程第3版 习题解答 PAGE 4 PAGE 3 PAGE 1 第1章 1简述分散式集中式和分布式通信模型的特点 参考解答 分散式各自独立的系统之间没有资源或信息的交换或共享存在大量数据冗余且维护成本高已被淘汰 集中式...
  • C#高级程序设计

    千人学习 2020-09-22 15:10:36
    本课程分为四部分(三层架构、设计模式、多线程、网络编程达人),详细的讲述了一名C#中、高级程序员需要学习的各项知识,其中宿舍管理系统实战是重中之重。课程主要特点:   1. 紧跟微软C#发展,使用C#语言和...
  • 数据的完整性验证报文鉴别技术 Hash函数 也称消息摘要MDMessage Digest将可变长度的报文M作为单向散列函数的输入然后得出一个固定长度的标志 HM称为Hash值哈希值 表达式MD=HM Hash算法 MD算法MD5128位 SHA算法SHA-...
  • “保姆级别”从零开始的C#TCP网络通信教程 本文主要使用tcp协议实现网络通信,包含窗体设计以及代码实现。

    “保姆级别”从零开始的C#TCP网络通信教程

    经过几日的原理学习和扒码之后,终于七七八八搞明白tcp的通信是怎么进行的了。
    注:源码为《C#开源虚拟仪器技术》实例


    前言

    本文主要给大家提供从零开始做一个包含客户端和服务端的tcp通信窗体应用的教程,并在此基础上理解TCP通信的原理,理解使用socket套接字进行通信的概念和实际运用,全文包含从原理到例程的详细操作,保证简单易上手


    一、什么是tcp通信

    首先,TCP是计算机实现网络通信的一种方式,全称是传输控制协议,计算机通信需要知道计算机的地址,互联网使用IP地址来标识计算机的网络地址,IP协议层往上是传输层,它提供了TCP和UDP这两种可选的协议,之所以选择TCP协议进行计算机的网络通信,是因为它的好处是能够检测和恢复IP层提供的主机到主机的信道可能发生的报文丢失、重复及其他错误,而socket处于TCP这类具体协议层上,它是进行网络通信最基本的操作单元,可以看做是两台主机进行通讯的端点。TCP通信,依靠的就是IP地址到socket套接字这样的由宏观到微观的这样一个过程。(或者直接使用已经封装好的Tcplistener类和TcpClient类来实现) 通过TCP/IP可实现单个网络内部或互联网间的通信,同时可提供简单的用户界面,有较高的网络通信的可靠性。所以本文主要倾向于如何进行用户界面即客户端和服务端的设计以及相关代码的实现。

    二、如何实现tcp通信

    TCP的工作过程可分为三个重要的阶段,一是建立连接,二是传输数据,二是断开连接

    1.建立连接

    建立连接最关键的一步就是进行3次握手,这一步主要关注三个“硬性指标”,分别是

    1. ACK,tcp报头的控制位之一,用于表示确认号是否有效,若有效则置1(确认号:用于告诉数据发送端发送过来的序列号之前的数据都已经接收到了)
    2. SYN,同步序列号,如果TCP建立连接成功则置1
    3. FIN,发送端完成发送任务位,当TCP完成了数据传输的任务,想要断开连接之后,该位置1

    详细过程:(同步通信方式)假定服务端向客户端发送信息

    1. 服务端向客户端发送一个含有SYN的数据段给客户端,并请求连接
    2. 客户端收到服务端收到请求后,用含有ACK和SYN的数据段响应服务端
    3. 服务端收到客户端发来的数据段后,再发送一个ACK,确认收到数据段,至此建立连接成功。

    注:握手的步骤在协议内部协议实现的,不体现在具体的上位机代码中。理解握手过程即可

    2.传输数据

    建立连接之后,就可以通过通信信道进行传输数据的任务了,但是需要注意的是TCP协议中的数据是以字节流的形式存在的,发送端需要将的数据转换为字节流,然后才可以发送。通常是字符集转换为字节序列,这其中就涉及到编码和解码的问题了。

    3.断开连接

    断开连接主要是关闭读写流。至于是服务端先断开连接还是客户端先断开连接,有时需要进行异常处理。


    三、窗体设计

    这一步主要使用工具箱中的按钮button和文本框text控件,点击相应控件即可查看代码。Label控件用于标识文本框。

    服务端client

    服务端窗体设计

    客户端server

    客户端窗体设计
    注意事项:
    这里需要注意的是要确保按钮的命名,以及其事件的名称,如客户端的发送按钮,要确保正确。示例如下:

    客户端发送按钮
    客户端发送按钮
    按钮的命名
    命名
    按钮事件即操作的命名
    操作Click的名称
    这一步的命名操作十分关键,关系到实际代码中的运行。以此类推。

    四、tcp代码实现(注:源码为《C#开源虚拟仪器技术》实例)

    为使编程变得简洁,这里使用类库Tcplistener类和TcpClient类实现Tcp通信(已经包含Socket套接字方法),并且服务端server只负责接收信息,客户端只负责发送信息。
    如果要实现全双工通信,加入多线程thread,对每个tcp开两个线程,一个线程用来处理发送数据,一个线程用来处理接收数据即可。推荐使用异步通讯方式,无阻塞现象。

    客户端client代码

    using System;
    using System.IO;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading;
    using System.Windows.Forms;
    
    namespace _13._2._3._1
    {
        public partial class TCPClient : Form
        {
            #region 变量
            private TcpClient tcpClient = null;
            private NetworkStream networkStream = null;
            private BinaryWriter writer;
            private const int Port = 51388;
            private IPAddress ipAddress = IPAddress.Loopback;
            private byte[] buffer;
            private string messageSend;
    
            #endregion 
            public TCPClient()
            {
                InitializeComponent();     
               
                textBox_clientIP.Text = ipAddress.ToString();
                textBox_port.Text = Port.ToString();
            }
    
            private void button_connect_Click(object sender, EventArgs e)
            {
                try
                {
                    tcpClient = new TcpClient();
                    tcpClient.Connect(textBox_clientIP.Text, int.Parse(textBox_port.Text));
                    if (tcpClient != null)
                    {
                        MessageBox.Show("连接成功");
                        networkStream = tcpClient.GetStream();
                        writer = new BinaryWriter(networkStream);                 
                    }
                }
                catch(Exception ex)
                {
                    MessageBox.Show("连接失败,请重试" + ex.Message);
                }
            }
    
            // 发送消息
            private void btnSend_Click(object sender, EventArgs e)
            {
                messageSend = textBox_messageSend.Text;
                if (messageSend != string.Empty)
                {
                    writer.Write(messageSend);
                    Thread.Sleep(500);
                    writer.Flush();
                }
                textBox_messageSend.Clear();
            }
    
            // 断开连接
            private void btnDisconnect_Click(object sender, EventArgs e)
            {
                writer?.Close();
                tcpClient?.Close();
            }
        }
    }
    
    

    服务端server代码

    using System;
    using System.IO;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace _13._2._3._2
    {
        public partial class TCPServer : Form
        {
            private const int Port = 51388;
            private TcpListener tcpLister = null;//创建对象,对象和类的属性以及行为完全相同
            private TcpClient tcpClient = null;
            IPAddress ipAddress = IPAddress.Loopback;//将IPAddress类中的属性Loopback赋给对象ipAddress,即127.0.0.1
            private NetworkStream networkStream = null;
            private BinaryReader reader;
            private byte[] buffer = new byte[1024];
            private string messageReceived;
    
            public TCPServer()
            {
                InitializeComponent();
                textBox_serverIP.Text = ipAddress.ToString();//当前对象以字符串形式返回
                textBox_port.Text = Port.ToString();
            }
    
            // 开始监听
            private void btnStart_Click(object sender, EventArgs e)
            {
                try
                {
                    tcpLister = new TcpListener(IPAddress.Parse(textBox_serverIP.Text), 
                        int.Parse(textBox_port.Text));
                    tcpLister.Start();
                    tcpClient = tcpLister.AcceptTcpClient();
                    if (tcpClient != null)
                    {
                        networkStream = tcpClient.GetStream(); //获取网络流对象
                        reader = new BinaryReader(networkStream); //从网络流中初始化读取对象
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    
            private void button_receive_Click(object sender, EventArgs e)
            {
                messageReceived = reader.ReadString();
                listBox_messageReceived.Items.Add(messageReceived);
            }
    
            private void btnStop_Click(object sender, EventArgs e)
            {
                tcpLister?.Stop();
            }
    
            private void button_disconnect_Click(object sender, EventArgs e)
            {
                reader?.Close();//断开连接,关闭读写流
                tcpClient?.Close();
            }
        }
    }
    
    

    注:源码为《C#开源虚拟仪器技术》实例
    参考资料链接:
    《C#开源虚拟仪器技术》
    https://blog.csdn.net/weixin_46594796/article/details/107881821
    https://javaedge.blog.csdn.net/article/details/113784188
    https://blog.csdn.net/qq_45060045/article/details/113360983
    https://blog.csdn.net/weixin_38247439/article/details/88529909
    https://blog.csdn.net/kevinfan2011/article/details/84660013

    展开全文
  • 本书通过经典案例详细讲解了用C#语言开发网络与通信程序的方法和技巧。  全书分为两个部分。第1部分是C#网络编程基础,介绍了C#集成开发环境、网络编程基础知识、网络应用开发流程。第2部分是C#案例应用部分,共...
  • 基于C_Socket的网络通信程序设计 介绍了socket的基本用法 以五子棋为例进行分析
  • C# 网络通信开发训练-32个实例 C# 网络通信开发训练 实例01 更改计算机名称...... 670 实例02 通过计算机名获取IP地址...... 672 实例03 通过IP地址获取主机名称...... 673 实例04 修改本机IP地址...... 674...
  • C#建立网络通信详解(一)

    千次阅读 2020-07-20 13:46:47
    C#建立网络通信可以使用Socket类或者TcpListener类,本文详细讲解使用Socket类建立网络通信。 Socket简单介绍 Socket接口是TCP/IP网络的应用程序接口(API)。程序员可以用它们来开发TCP/IP网络应用程序。Socket...

    C#建立网络通信可以使用Socket类或者TcpListener类,本文详细讲解使用Socket类建立网络通信。

    Socket简单介绍

    • Socket接口是TCP/IP网络的应用程序接口(API)。程序员可以用它们来开发TCP/IP网络应用程序。Socket可以看成是网络通信上的一个端点,也就是说,网络通信包括两台主机或两个进程,通过网络传递它们之间的数据。因此为了进行网络通信,程序在网络对话的每一端都需要一个Socket
    • TCP/IP传输层使用协议端口将数据传送给一台主机的特定应用程序,当传输层模块的网络软件模块要与另一个程序通信时,它将使用协议端口。Socket是运行在传输层的API,所以在使用Socket建立连接发送数据时,要指定一个端口给它
    • 使用Socket接口进行网络通信的简要步骤如下:
      ① 建立一个socket
      ②配置socket,就是将socket连接到远程主机或给socket指定一个本地协议端口
      ③ 通过socket发送和接收数据
      ④ 关闭此socket

    C#Socket使用详解

    • 命名空间的添加
      using System.Net;
      using System.Net.Socket;

    • 构造Socket对象
      sock=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
      参数解释:
      AddressFamily成员指定socket用来解析地址的寻址方案。例如,InterNetwork表示需要一个IP版本4的地址,InterNetworkV6表示IP版本6的地址。
      SocketType参数指定Socket的类型。例如,Raw支持对基础传输协议的访问,Stream支持可靠、双向、基于连接的数据流。
      ProtocolType指定Socket类支持的协议。例如,IP表示网际协议,TCP表示传输控制协议。

    • Socket的配置和连接
      IPAddress ServerIP=IPAdress.Parse(” 192.18.16.186”); //设定服务器IP地址
      IPEndPoint Server=new IPEndPoint(ServerIP,8866); //生成服务器网络端点
      Sock=new Socket(AddressFamily.InterNetwork,SocketType.Stream,
      ProtocolType.Tcp) // 构造一个socket
      Sock.Bind(Server); //将socket和服务器绑定
      Sock.Listen(8); //开始监听,允许连接队列的长度为8(若为0表示无限制)
      Socket connectsock=sock.Accept();//用于同连接请求的socket通信
      参数解释:
      ServerIP表示IP地址,8866表示提供服务的端口号。

    • 客户端向服务器端发出连接请求
      IPEndPoint Server=new IPEndPoint(ServerIP,Port); //定义要连接的服务器端点
      Sock=new Socket(AddressFamily.InterNetwork,SocketType.Stream,
      ProtocolType.Tcp) // 构造一个socket
      Sock.Connect(Server); // 与服务器连接

    • 数据的传送和接收
      public static string data=null; //定义字符串变量存放接收到的信息
      bytes=new byte[1024];
      int bytesRec=connectsock.Receive(bytes,bytes.Lentgh,0); //接受来自客户端的数据
      Console.WriteLine(”Text received:{0}”,bytes); //显示接收到的数据
      connectsock.Send(bytes,bytes.Length,0); //发送数据到客户端
      参数解释:
      bytes表示要发送(接收)的数据;bytes.Length表示要发送(接收)数据的大小;0是Socket消息的常数值,具有允许按位组合其成员值的属性。
      返回值为发送到socket的字节数。

    • 关闭Socket
      Sock.Close();//关闭Socket连接
      注意
      在socket关闭之前,要确保已经发送和接收完所有挂起的数据,因此在关闭socket之前,要先调用
      Sock.Shutdown(SocketShutdown.Both);
      参数解释:SocketShutdown指定不再允许的操作。成员名称:Both禁止socket发送和接收;Receive禁止socket接收数据;Send禁止socket发送数据。

    Socket通讯主要可以分为同步与异步两种。同步相对来说会更简单,但因为会造成线程阻塞,所以适用性不高,但从学习入门角度来看,可以更简单直接地了解整个过程。下面给出一个简单例子,是同步Socket服务端程序的代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApp210
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                IPEndPoint iP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000);
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    
                socket.Bind(iP);
                socket.Listen(0);
    
                while (true)
                {
                    Socket socke = socket.Accept();
    
                    byte[] vs = new byte[1024];
    
                    int lenth = socke.Receive(vs);
    
                    richTextBox1.Text += "消息:" + Encoding.UTF8.GetString(vs) + "\r\n";
    
                    MessageBox.Show(Encoding.UTF8.GetString(vs));
    
                    socke.Send(Encoding.UTF8.GetBytes("已接收"));
                }
            }
        }
    }
    

    在下一篇文章里会提供异步Socket服务端和客户端程序的例子。

    展开全文
  • C#程序设计教程

    2020-12-19 13:42:53
    内容概要本书详细介绍C#程序设计的基本环境、概念、方法和应用。内容分为四个部分;第一部分介绍C#语言基础:数据、控制结构、数组、类、接口、结构等;第二部分深入介绍C#知识:类型转换、参数传递、虚方法调用、...
  • VS2005下用C#编写的FTP代码实现,包含了服务器端和客户端两个程序,实现文件的传输。
  • C# Socket网络通信模块

    2014-02-16 09:39:13
    使用C#(.Net 4.0, Visual Studio 2013)开发的网络通信模块。 封装了Sender以及Recver对象。支持任何对象的传送。 自然里面还有什么不完善的地方,不过作为初学者学习的参考以及项目中多次发送小量数据已经完美了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,244
精华内容 12,497
关键字:

c#网络通信程序设计

c# 订阅