Visual C#.Net 网络程序开发-Socket篇

Visual C#.Net网络程序开发-Tcp篇(1)

Visual C#.Net网络程序开发-Tcp篇(2)

Visual C#.Net网络程序开发-Tcp篇(3)

前一篇《Visual C#.Net网络程序开发-Socket篇》中说到:支持Http、Tcp和Udp的类组成了TCP/IP三层模型(请求响应层、应用协议层、传输层)的中间层-应用协议层,该层的类比位于最底层的Socket类提供了更高层次的抽象,它们封装 TCP 和 UDP 套接字的创建,不需要处理连接的细节,这使得我们在编写套接字级别的协议时,可以更多地尝试使用 TCPClient 、 UDPClient和TcpListener,而不是直接向 Socket 中写。它们之间的这种层次关系示意如下:

可见, TcpClient 类基于 Socket 类构建,这是它能够以更高的抽象程度提供 TCP 服务的基础。正因为这样,许多应用层上的通讯协议,比如FTP(File Transfers Protocol)文件传输协议、HTTP(Hypertext Transfers Protocol)超文本传输协议等都直接创建在TcpClient等类之上。 
   
      TCPClient 类使用 TCP 从 Internet 资源请求数据。TCP 协议建立与远程终结点的连接,然后使用此连接发送和接收数据包。TCP 负责确保将数据包发送到终结点并在数据包到达时以正确的顺序对其进行组合。 
   
      从名字上就可以看出,TcpClient类专为客户端设计,它为 TCP 网络服务提供客户端连接。TcpClient 提供了通过网络连接、发送和接收数据的简单方法。 
   
      若要建立 TCP 连接,必须知道承载所需服务的网络设备的地址(IPAddress)以及该服务用于通讯的 TCP 端口 (Port)。Internet 分配号码机构 (Internet Assigned Numbers Authority, IANA) 定义公共服务的端口号(你可以访问 http://www.iana.org/assignments/port-numbers获得这方面更详细的资料)。IANA 列表中所没有的服务可使用 1,024 到 65,535 这一范围中的端口号。要创建这种连接,你可以选用TcpClient类的三种构造函数之一: 
   
      1、public TcpClient()当使用这种不带任何参数的构造函数时,将使用本机默认的ip地址并将使用默认的通信端口号0。这样情况下,如果本机不止一个ip地址,将无法选择使用。以下语句示例了如何使用默认构造函数来创建新的 TcpClient: 
   
      TcpClient tcpClientC = new TcpClient(); 
   
   
      2、public TcpClient(IPEndPoint)使用本机IPEndPoint创建TcpClient的实例对象。上一篇介绍过了,IPEndPoint将网络端点表示为IP地址和端口号,在这里它用于指定在建立远程主机连接时所使用的本地网络接口(IP 地址)和端口号,这个构造方法为使用本机IPAddress和Port提供了选择余地。下面的语句示例了如何使用本地终结点创建 TcpClient 类的实例: 
   
      IPHostEntry ipInfo=Dns.GetHostByName("www.tuha.net");//主机信息 
      IPAddressList[] ipList=ipInfo.AddressList;//IP地址数组 
      IPAddress ip=ipList[0];//多IP地址时一般用第一个 
      IPEndPoint ipEP=new IPEndPoint(ip,4088);//得到网络终结点 
      try


            TcpClient tcpClientA = new TcpClient(ipLocalEndPoint); 
      } 
      catch (Exception e )


            Console.WriteLine(e.ToString()); 
      } 
   
   
      到这里,你可能会感到困惑,客户端要和服务端创建连接,所指定的IP地址及通信端口号应该是远程服务器的呀!事实上的确如此,使用以上两种构造函数,你所实现的只是TcpClient实例对象与IP地址和Port端口的绑定,要完成连接,你还需要显式指定与远程主机的连接,这可以通过TcpClient类的Connect方法来实现, Connet方法使用指定的主机名和端口号将客户端连接到 远程主机: 
   
      1)、

public void Connect(IPEndPoint); 使用指定的远程网络终结点将客户端连接到远程 TCP 主机。 
   
      public void Connect(IPAddress, int); 使用指定的 IP 地址和端口号将客户端连接到 TCP 主机。 
   
      public void Connect(string, int); 将客户端连接到指定主机上的指定端口。 
   
      需要指出的是,Connect方法的所有重载形式中的参数IPEndPoint网络终结点、IPAddress以及表现为string的Dns主机名和int指出的Port端口均指的是远程服务器。 
   
      以下示例语句使用主机默认IP和Port端口号0与远程主机建立连接: 
   
      TcpClient tcpClient = new TcpClient();//创建TcpClient对象实例 
      try


            tcpClient.Connect("www.contoso.com",11002);//建立连接 
      } 
      catch (Exception e )


            Console.WriteLine(e.ToString()); 
      } 
   
   
      3、

public TcpClient(string, int);

初始化 TcpClient 类的新实例并连接到指定主机上的指定端口。与前两个构造函数不一样,这个构造函数将自动建立连接,你不再需要额外调用Connect方法,其中string类型的参数表示远程主机的Dns名,如:www.tuha.net。 
   
      以下示例语句调用这一方法实现与指定主机名和端口号的主机相连: 
   
      try


            TcpClient tcpClientB = new TcpClient("www.tuha.net", 4088); 
      } 
      catch (Exception e )


            Console.WriteLine(e.ToString()); 
      }
  
    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。

Visual C#.Net 网络程序开发-Socket篇

Visual C#.Net网络程序开发-Tcp篇(1)

Visual C#.Net网络程序开发-Tcp篇(2)

Visual C#.Net网络程序开发-Tcp篇(3)

转载于:https://www.cnblogs.com/tengguo/archive/2011/12/30/2307665.html

Visual C#.Net网络程序开发-Tcp篇(1)相关推荐

  1. 数据库应用程序开发基础篇—— .NET中SQL Server数据库的操作C#篇之一

    数据库应用程序开发基础篇-- .NET中SQL Server数据库的操作C#篇之一 写在前面:前面介绍了数据库系统的基本概念,SQl语句基本使用方法,接下来通过学习具体语言和具体数据库结合的应用开发来 ...

  2. 【微信小程序开发学习篇】

    微信小程序开发学习篇 概述 相关信息 笔记制作时间:2022-9-25 参考视频:黑马视频 参考文档:微信小程序官方开发文档 文章目录 微信小程序开发学习篇 概述 相关信息 小程序基础 1.数据绑定与 ...

  3. [HTML5]移动Web应用程序开发 HTML5篇 (四) 多媒体API

    介绍 本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具:HTML5,JavaScript, CSS3. 本篇是HTML5介绍的第三篇,主要介绍HTML5的Canvas API. ...

  4. 网络程序之TCP、UDP篇(其一)

    我记得最开始接触网络程序是在我读大二的时候,当时我做的是一个聊天的程序,也不知道服务器和客户端的概念,在网上就是一顿找啊,才到自己能看懂的答案,但是只能两个程序能聊天.造成这样的原因是程序是阻塞的,然 ...

  5. Linux网络编程:基于UDP的程序开发回顾篇

    基于无连接的UDP程序设计 同样,在开发基于UDP的应用程序时,其主要流程如下: 对于面向无连接的UDP应用程序在开发过程中服务端和客户端的操作流程基本差不多.对比面向连接的TCP程序,服务端少了li ...

  6. 微信小程序|开发实战篇之request请求(单个、多个参数,json对象,header)

    开发实战篇之request请求 前言 1.发送单个.多个参数的request 2.发送JSON对象的request 3.发送header的request 前言 小程序发送网络请求常会遇到的问题: 请求 ...

  7. 微信小程序|开发实战篇之三

    开发实战篇之三 前言 1.使用Promise获取多个异步方法的结果 2.高阶组件-search 2.1 search组件的基本结构 2.1.1 search组件的骨架index.wxml文件 2.1. ...

  8. 微信小程序|开发实战篇之一

    开发实战篇之一 前言 1.通用方法的封装 2.数据获取方法的封装 2.1 抽离classic.js中的request()方法 2.2 组件数据传递 3.movie组件的创建 3.1 组件代码开发 3. ...

  9. 微信小程序|开发实战篇之七-steps进度条组件

    开发实战篇之七 前言 0.知识点补充 0.1 $emit()函数 0.2 wxs 0.3 ⚡组件间关系 1.steps进度条组件 1.1.step进度条单元的骨架文件wxml 1.2.step进度条单 ...

最新文章

  1. 10分钟学会React Context API
  2. Java三元表达式学习笔记
  3. Entity Framework 批量插入
  4. Python模块和包:导入制作模块、name、模块定位顺序(文件名与模块名重复、功能名与功能名重复、函数名与功能名重复、变量名与模块名重复)、from 模块名 import *__all__列表、包
  5. mysql服务重启后不见了_太狗血!翔安已婚男出轨KTV服务员,致其怀孕后避而不见!情人上门讨要说法后原配妻子也......
  6. 班级学生总成绩和平均成绩计算
  7. 你做不到对企业真正有价值,下一个裁员就是你
  8. IScroll5 参数说明和调用方法
  9. Html - Json转excel文件
  10. python制作web网页实例_基于python实现简单网页服务器代码实例
  11. 微信小程序中组件传值
  12. 计算机本科生也能轻松发表SCI论文?纪念我第一篇论文的心路历程
  13. Android动画 补间动画
  14. OpenGauss/MogDB调用C FUNCTION 范例
  15. Python批量删除文件名中带小括号数字(1)(2)(3)...
  16. Vue ElementUI table给表格一个斜线分隔线
  17. js将 一串数字1403149534转换为日期格式
  18. ubuntu18.04 安装 roboware-studio
  19. 基于互质阵的DOA估计
  20. JAVA易医就医购药交互平台计算机毕业设计Mybatis+系统+数据库+调试部署

热门文章

  1. Python指南--错误和异常
  2. [Python] L1-004. 计算摄氏温度-PAT团体程序设计天梯赛GPLT
  3. 1061. Dating (20)-PAT甲级真题
  4. 全文搜索之 Elasticsearch
  5. APM应用性能管理的过去二十年
  6. Net::SSH::Perl 包 与 Net::OpenSSH 包的 性能对比代码
  7. 25GbE可以解决数据中心过载问题吗?
  8. validate针对checkbox、radio、select标签的验证
  9. iPhone私有API
  10. 每天一个linux命令(10):more命令