Socket网络通讯

网络编制程序

       
使用C#进行网络编制程序时,平常都急需用到System.Net命名空间、System.Net.Sockets命名空间和System.Net.Mail命名空间;

1.
System.Net命名空间:
为眼下互联网上行使的有余钻探提供了简要的编制程序接口。

  1. DNS类:DNS是贰个静态类,它从Internet域名系统(DNS)检索有关特定主机的音信,在IPHostEntry类的实例中回到来自DNS查询的主机新闻。(GetHostName(卡塔尔(قطر‎找到地点系统的主机名,然后再用GetHostByName(卡塔尔(英语:State of Qatar)找到主机的IP地址)
  2. IPAddress类:包括Computer在IP互连网上之处,首要用于提供网际左券(IP)地址。
  3. IPEndPoint类包罗应用程序连接到主机上的劳引力管理服务所急需的主机和地方或远程端口音信。首要用以将网络端点表示为IP地址和端口号。
  4. WebClient类:提供向UEvoqueL标记的此外地方、Intranet或Internet能源发送数据以致从这么些能源选拔数据的公物艺术。
  5. WebRequest类:.Net
    Framework的呼吁/响应模型的抽象基类,用于访问Internet数据。使用该央求/响应模型的应用程序能够用左券不可见的法子从Internet须求数据。

2. System.Net.Sockets命名空间

       
主要提供制作Sockets网络应用程序的相关类,在这之中Socket类,TcpClient类、TcpListener类和UdpClient类较为常用。在.NET框架下支付时,直接利用System.Net.Sockets名称空间中的Socket类编制程序较为复杂,而应用层的类TcpClient、TcpListener
和 UdpClient为 Socket
通讯提供了更简便易行、对客户更协和的接口。它们和Socket类之间的这种档期的顺序关系如图

金沙手机APP 1

(1)Socket类:重中之重用来管理总是(将应用程序与端口连接起来,端口是生机勃勃台Computer的数码都经过此三番五次互联网,
Socket是基于流套接字契约(TCP合同)/基于数据报套接字合同(UDP公约)最为通用的API。),达成Beck雷通讯端套接字接口,同有的时候间它还定义了绑定、连接网络端点及传输数据所需的种种法子。

    1. void Bind(IPEndPoint
      localEP卡塔尔(英语:State of Qatar):绑定地址,使Socket与三个地方终节点相关联。
    2. Void Connect(IPEndPoint ip卡塔尔(قطر‎:创立连接
    3. Void Listen(int backlog卡塔尔(英语:State of Qatar):将Socket置于侦听状态,
      backlog最多可连接数。
    4. Int Receive(byte[] buffer卡塔尔国:采用数据
    5. Int Receive (byte[] buffer,ref IPEndPoint
      ip卡塔尔:从钦定地点选取数据
    6. Int Send(byte[] buffer卡塔尔:发送数据
    7. Int Send To(byte[] buffer,ref IPEndPoint
      remoteIP卡塔尔(قطر‎:向钦命地点发送数据
    8. Void Shutdown(SocketShutdown
      how卡塔尔(英语:State of Qatar):关闭套接字,how钦命不在允许执行的操作

注:使用accept函数建构新的连年时,并不是采用原本的Socket举办通讯,而是重返四个新的Socket套接字进行一而再通讯。原本的Socket继续走入监听状态,等待客人的连年必要。

(2)TcpClient类:依照Socket类构建,用于在一同阻止形式下通过网络来连接,发送,选取数据。

       
那是它能够以更加高的肤浅程度提供TCP服务的根基。体未来网络数据的出殡和埋葬和接收地点,是TcpClient使用NetworkStream互连网流管理技能,使得它读写多少更是有益直观。TcpClient类专为顾客端设计,它为
TCP 网络服务提供客户端连接。

(3)NetworkStream网络流:能够被视为贰个数据通道,架设在多少来源端(顾客Client卡塔尔(英语:State of Qatar)和选拔端(服务Server)之间,通过TcpClient.GetStream方法,再次回到用于发送和接纳数据的互连网流NetworkStream。

       
注:要开创NetworkStream必需提供连接的Socket.默许情形下关闭NetworkStream并不会关闭所提供的Socket.倘若要关闭Socket权限,则必得将ownsSocket布局函数参数的值钦命为true.而后的数目读取及写入均指向那一个通道来开展。不支持对互连网流的自由访谈。

演示如下:通过以下措施获得NetworkStream互联网流之后,就足以选拔正规流读写方法Write和Read来发送和收受多少了。

1 TcpClient tcpClient = new TcpClient();             //创建TcpClient对象实例
2 tcpClient.Connect("www.baidu.com",4088);         //尝试与远程主机相连
3 NetworkStream stream=tcpClient.GetStream();      //获取网络传输流
  1. BeginRead(卡塔尔:从NetworkStream初步一步读取
  2. BeginWrite(卡塔尔(قطر‎:初阶向流异步写入
  3. Close():关闭NetworkStream
  4. EndRead(卡塔尔国:管理异步读取停止
  5. EndWrite(卡塔尔国:管理异步写入结束
  6. Flush(卡塔尔(英语:State of Qatar):刷新流中的数码
  7. Read(卡塔尔国:从流中读取
  8. ReadByte(卡塔尔(英语:State of Qatar):从流中读取一个字节,并将流内的职分向前推进一个字节。达到最后,重临-1。
  9. Write(卡塔尔(英语:State of Qatar):将数据写入NetworkStream
  10. WriteByte(卡塔尔:将二个字节写入流内的脚无业位,并将流内之处向前推动二个字节。

Server:获取基本功互联网Socket

  1. AcceptSocket/AcceptTcpClient:选择挂起的一连央求
  2. BeginAcceptSocket/BeginAcceptTcpClient:初叶三个异步操作来经受七个传开的三番五次尝试
  3. Start:起头侦听传入的接连诉求
  4. Stop:关闭侦听

Client顾客端连接侦听器的两种格局:

(1)成立叁个TcpClient,并调用3个可用Connect方法之后生可畏。

(2)使用远程主机的主机名和端口号创设TcpClient,此布局函数将机关尝试一个连接。

  1. Client:获取或设置基本功Socket
  2. ReceiveBufferSize:获取或设置采取缓冲区的分寸
  3. SendBufferSize:获取或安装发送缓冲区的大小
  4. BeginConnect方法:带头三个对长途主机连接的异步诉求
  5. Close:释放TcpClient 实例,不倒闭根基连接
  6. Connect:使用钦定的主机名和端口号将客户端连接到TCP主机
  7. GetStream:再次来到用于发送和选拔数据的NetworkStream

创制连接TCPClient连接方式:

(1)创设一个TcpClient,并调用八个可用的Connect(卡塔尔国方法之生龙活虎。

  1. void
    Connect(IPEndPoint卡塔尔(قطر‎:使用内定的长途互连网节点将客商端连接到远程TCP主机。

    1 IPAddress ipAddress = Dns.Resolve(Dns.GetHostName()).AddressList(0);//获取IP地址
    2 IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 60000);//设置端口
    3 TcpClient tcpClientA = new TcpClient(ipLocalEndPoint);//创建客户端
    

 

 2. void
Connect(IPAddress,int卡塔尔(英语:State of Qatar):使用内定的IP地址和端口号将客商端连接到TcpClient主机。

 3. void Connect(string,int卡塔尔国:将顾客端连接到钦点主机上的钦命端口。

 1
TcpClient tcpClientB = new
TcpClient(“www.baidu.com”, 8888卡塔尔(英语:State of Qatar);//创立客商端 

(2)  使用远程主机的主机名和端口号创立TcpClient。

1 TcpClient tcpClient = new TcpClient();//创建TcpClient对象实例
2 tcpClient.Connect("www.baidu.com",8080);//建立连接

       
注:要发送和承当多少,先采纳GetStream(卡塔尔国方法来获取三个NetworkStream,再调用NetworkStream的Write(卡塔尔(قطر‎和Read(卡塔尔国方法与远程主机之间发送和选取数据。最终选择Close(卡塔尔国方法释放与TcpClient(卡塔尔(英语:State of Qatar)关联的全部能源。

TcpListner:用于阻止同步形式下侦听和经受传入的连年央浼。

       
可选用TcpClient类或Socket类来延续TcpListener,而且能够使用IPEndPoint、本地IP地址及端口号来创建TcpListener实例对象。

       
.Net中的TcpListener首要职能是监视TCP端口上顾客端的央浼,通过绑定本机IP地址和对应端口创制TcpListener对象实例,并由Start方法运行侦听;当TcpListener侦听到顾客端的总是后,通过AcceptTcpClient方法接收传入的接连需要并成立TcpClient以拍卖央求,可能通过AcceptSocket方法选择传入的两次三番乞求并成立Socket以拍卖哀求。

(1)创立服务器端:

 1 //建立TCP监听器TcpListener对象。
 2  TcpListener tl=new TcpListener(端口号);
 3 //启动监听器
 4 tl.Start();
 5 //用监听器获取连接进来的套接字(Socket)
 6 Socket s=myList.AcceptSocket();
 7 //通过Socket的Receive方法获取客户端发送的数据
 8 byte [] result=new byte[1024];
 9 int k=s.Receive(result);
10 //通过Socket的Send方法向客户端发送数据
11 byte[] st=System.Text.Encoding.Default.GetBytes(“text”);
12 s.Send(st);
13 //在通讯结束后,需要释放资源结束监听
14 s.Close();
15 tl.Stop();

Socket建构服务器:初阶化监听Socket   采取新的顾客端连接   收发数据  
关闭连接

1 socketServer = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);//创建Socket 客户端
2 //Socket绑定本地端口监听客户端连接;
3 Socket.Bind(端口号);
4 Socket.Listen();
5 socket.Receive();//创建连接的客户端的Socket并开启线程接收数据;
6 socket.Send();//发送数据
7 socket.Close();//关闭连接

TcpClient创立客商端:

 1 //建立TCP客户端TcpClient对象。
 2 TcpClient tcpclnt = new TcpClient();
 3 //连接服务器
 4 tcpclnt.Connect(IP地址字符串,端口号);
 5 //获得客户端网络传输 流
 6 Stream stm =tcpclnt.GetStream();
 7 //通过Stream的Write方法向服务器端发送的数据
 8 //通过Stream的Read方法读取服务器段发来的数据
 9 //在通讯结束后,需要释放资源,结束和服务器的连接
10 tcpclnt.Close();

TCP与UDP的区别

  1. TCP是面向连接的服务、UDP是面向无连接服务
  2. TCP是具有差错调节的,而UDP未有贫乏可信性
  3. TCP的传导是有序的,UDP是冬季的
  4. UDP的实时性更加好,有简要,神速、占用能源少的优点。
  5. UDP传输约束在64KB之内,Tcp意气风发旦创制连接,就足以按统大器晚成的格式传输大量的数量。

应用UdpClient类完毕UDP合同编制程序

金沙手机APP,       
 由于UDP商业事务并无需举行规定的接二连三,程序中能够没有必要考虑连接和部分十一分的抓获专门的学业。在有一些对数据安全性必要不是相当的高的景观下行使UDP合同。

       
在System.Net.Sockets命名空间下的UdpClient类,提供更加直观的轻松使用的品质和方式,进而减弱UDP编制程序的难度。使用UdpClient时,连接的顾客端必要先发送多少个音信给服务器,服务器技巧和顾客端通信。

UdpClient类的布局函数有以下二种格式:

1 UdpClient();
2 UdpClient(int port);
3 UdpClient(IPEndPoint iep);
4 UdpClient(string remoteHost,int port);

利用Socket编写UdpClient

1 Socket udpSocket;//创建Socket
2 udpSocket.Bind(IPAddress,IPEndPoint);//把Socket绑定本地IP和端口号
3 //开启线程接收信息:先保存接到信息的端口号,使用ReceiveFrom发送信息
4 EndPoint point = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号
5 EndPoint point = (EndPoint)IPEndPoint;
6 //发送信息:使用EndPoint创建发送目标的IP和端口号;
7 //关闭线程和Socket

利用UDPClient编程

 1 //建立UDP客户端UdpClient对象。
 2 UdpClient uc=new UdpClient(端口号);
 3 //连接对方远程主机
 4 uc.Connect(对方IP地址,对方远程主机的端口号);
 5 //开启线程,通过uc的Receive方法获取远程主机发送来的数据
 6 IPEndPoint ip=new IPEndPoint(IPAddress.Any,0);
 7 byte[] b=uc.Receive(ref ip);
 8 //通过uc的Send方法向远程主机发送数据
 9 byte[] st=System.Text.Encoding.Default.GetBytes(“text”);
10 uc.Send(st);
11 //在通讯结束后,需要释放资源
12 uc.Close();

 

相关文章