威尼斯人线上娱乐

的界别及关联,Socket的多个成效类TCPClient

30 3月 , 2019  

网络编制程序

应用程序能够透过 TCPClient、TCPListener 和 UDPClient 类使用传输控制协议
(TCP) 和用户数据文报业协会议 (UDP) 服务。这么些协议类建立在
System.Net.Sockets.Socket
类的功底之上,负责数据传送的细节。(也正是说TCPClient、TCPListener 和
UDPClient 类是用来简化Socket)

应用程序能够经过 TCPClient、TCPListener 和 UDPClient 类使用传输控制协议
(TCP) 和用户数量文报业协会议 (UDP) 服务。那一个协议类建立在
System.Net.Sockets.Socket
类的底蕴之上,负责数据传送的细节。(也便是说TCPClient、TCPListener 和
UDPClient 类是用来简化Socket)

TCPServer:

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

TcpClient 和 TcpListener 使用 NetworkStream 类表示网络。使用 GetStream
方法重返网络流,然后调用该流的 Read 和 Write 方法。NetworkStream
不有所协议类的根基套接字,因而关门它并不影响套接字。

    TcpClient 和 TcpListener 使用 NetworkStream
类表示网络。使用 GetStream 方法重返网络流,然后调用该流的 Read 和 Write
方法。NetworkStream
不拥有协议类的功底套接字,由此关门它并不影响套接字。

TCP 网络客户端侦听连接。

1.
System.Net命名空间:
为最近网络上采纳的有余商谈提供了回顾的编制程序接口。

UdpClient 类使用字节数组保存 UDP 数据文报。使用 Send
方法向互连网发送数据,使用 Receive 方法接收传入的多少文报。

    UdpClient 类使用字节数组保存 UDP 数据文报。使用 Send
方法向互联网发送数据,使用 Receive 方法接收传入的数额文报。

可使用 TcpClient 或 Socket 来连接 TcpListener。可采纳IPEndPoint、本地 IP 地址及端口号或许仅使用端口号,来创制
TcpListener。能够将地点 IP 地址钦点为 Any,将地面端口号钦赐为
0(若是期望基础服务提供程序为你分配那个值)。假设您选用这么做,可在连接套接字后使用
LocalEndpoint 属性来标识已钦赐的音讯。

  1. DNS类:DNS是三个静态类,它从Internet域名系统(DNS)检索有关特定主机的音信,在IPHostEntry类的实例中回到来自DNS查询的主机音信。(GetHostName()找到当地系统的主机名,然后再用GetHostByName()找到主机的IP地址)
  2. IPAddress类:包罗总结机在IP网络上的地址,首要用来提供网际协议(IP)地址。
  3. IPEndPoint类包罗应用程序连接到主机上的劳动所急需的主机和地点或远程端口新闻。重要用来将网络端点表示为IP地址和端口号。
  4. WebClient类:提供向U奥迪Q5L标识的别样地点、Intranet或Internet财富发送数据以及从那个能源接收数据的国有措施。
  5. WebRequest类:.Net
    Framework的请求/响应模型的抽象基类,用于访问Internet数据。使用该请求/响应模型的应用程序能够用协议不可见的主意从Internet请求数据。

1.TcpClient

1.TcpClient     TcpClient 类提供了一部分简易的方式,用于在一齐阻止情势下通过互连网来三番五次、发送和接收流数据。为使
TcpClient 连接并沟通数据,使用 TCP
ProtocolType
创建的
TcpListener

Socket
必须侦听是不是有扩散的接连请求。能够利用上边二种艺术之接二连三接到该侦听器:
   (1)创建1个 TcpClient,并调用多个可用的
Connect
方法之一。    (2)使用远程主机的主机名和端口号创制TcpClient。此构造函数将自动尝试三个连接。    
给后代的印证要发送和接收数据,请使用
GetStream
方法来取得贰个
NetworkStream。调用
NetworkStream 的
Write

Read
方法与长途主机之间发送和接收数据。使用
Close
方法释放与 TcpClient 关联的有所财富。
    上面包车型地铁例证给出怎么采用TcpClient连接受服务器:

Start 方法用来最先侦听传入的连接请求。Start
将对传播连接举办排队,直至您调用 Stop 方法或它早已成功 马克斯Connections
排队甘休。可选取 AcceptSocket 或 AcceptTcpClient
从传出连接请求队列提取连接。那二种艺术将堵住。即便要制止阻止,可率先采用Pending 方法来规定队列中是不是有可用的连接请求。

2. System.Net.Sockets命名空间

TcpClient
类提供了某个总结的艺术,用于在同步阻止格局下通过互连网来连接、发送和接收流数据。为使
TcpClient 连接并互换数据,使用 TCP ProtocolType 创立的 TcpListener 或
Socket
必须侦听是不是有传出的连接请求。能够选取下边三种格局之一而再接到该侦听器:

using System;

 bool done = false;
            //TcpListener listener = new TcpListener(portNum); //依照VS二零零五 MSDN 此方法已经过时,不再动用
            // IPEndPoint类将网络标识为IP地址和端口号
            TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Any, portNum));
            listener.Start();
            while (!done)
            {
                Console.Write(“Waiting for connection…”);
                TcpClient client = listener.AcceptTcpClient();
                Console.WriteLine(“Connection accepted.”);
                NetworkStream ns = client.GetStream();
               
                byte[] tempBuffer = new byte[4096];
                FileStream fs = File.Open(“D:\\tcpServer”+new Random().Next().ToString() + “.gif”, FileMode.CreateNew);
                int bytesRead = 0;
                do
                {
                    bytesRead = ns.Read(tempBuffer, 0, 4096);
                    fs.Write(tempBuffer, 0, bytesRead);
                }while (bytesRead > 0);
                
                fs.Close();
                client.Close();
                Console.WriteLine(“file accepted.”);               
            }
            listener.Stop();

       
首要提供制作Sockets互联网应用程序的连带类,当中Socket类,TcpClient类、TcpListener类和UdpClient类较为常用。在.NET框架下支付时,直接行使System.Net.Sockets名称空间中的Socket类编制程序较为复杂,而应用层的类TcpClient、TcpListener
和 UdpClient为 Socket
通讯提供了更简约、对用户更友善的接口。它们和Socket类之间的那种层次关系如图

(1)创设三个 TcpClient,并调用八个可用的 Connect 方法之一。

using
System.Collections.Generic;

TCPClient:

威尼斯人线上娱乐 1

(2)使用远程主机的主机名和端口号创立TcpClient。此构造函数将自行尝试二个一连。

using System.Text;

TcpClient 为 TCP 网络服务提供客户端连接。

(1)Socket类:主要用以管理总是(将应用程序与端口连接起来,端口是一台计算机的数目都经过此延续网络,
Socket是依照流套接字协议(TCP协议)/基于数据报套接字协议(UDP协议)最为通用的API。),达成Beck雷通讯端套接字接口,同时它还定义了绑定、连接互联网端点及传输数据所需的各个办法。

给子孙后代的评释要发送和接收数据,请使用 GetStream 方法来收获3个NetworkStream。调用 NetworkStream 的 Write 和 Read
方法与远程主机之间发送和接收数据。使用 Close 方法释放与 TcpClient
关联的拥有财富。

using
System.Net.Sockets;

TcpClient
类提供了有的简短的不二法门,用于在一起阻塞格局下通过互连网来连接、发送和接收流数据。

    1. void Bind(IPEndPoint
      localEP):绑定地址,使Socket与多少个地点终节点相关联。
    2. Void Connect(IPEndPoint ip):建立连接
    3. Void Listen(int backlog):将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):关闭套接字,how钦定不在允许实施的操作

下边包车型大巴例证给出怎么选择TcpClient连接受服务器:

using System.Net;

为使 TcpClient 连接并沟通数据,使用 TCP ProtocolType 创建的
TcpListenerSocket
必须侦听是或不是有扩散的一连请求。能够动用上面二种方式之三番五次接到该侦听器:

注:使用accept函数建立新的连年时,并不是接纳原来的Socket进行通讯,而是重临四个新的Socket套接字进行延续通讯。原来的Socket继续进入监听状态,等待客人的连年要求。

using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
 
namespace tcpclient
{
    class Program
    {
        private static int portNum = 11000;
        private static string hostName = Dns.GetHostName().ToString();
        public static void Main(String[] args)
        {
            try
            {
                Console.WriteLine(“主机名字:”+ Dns.GetHostName());
                Console.WriteLine(“主机IP地址:”+ Dns.GetHostAddresses(Dns.GetHostName())[0]);
                TcpClient client = new TcpClient(hostName, portNum);
                NetworkStream ns = client.GetStream();
                byte[] bytes = new byte[1024];
                int bytesRead = ns.Read(bytes, 0, bytes.Length);
                //将字节流解码为字符串
                Console.WriteLine(Encoding.ASCII.GetString(bytes, 0, bytesRead));
                client.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
     
        }
    }
}

 

  • 开创二个 TcpClient,并调用三个可用的 Connect 方法之一。
  • 使用远程主机的主机名和端口号创造
    TcpClient。此构造函数将自动尝试八个接连。

(2)TcpClient类:依照Socket类塑造,用于在联合署名阻止形式下通过互连网来连接,发送,接收数据。

2.TcpListener

namespace tcpclient

注意   假使要在一起阻塞形式下发送无连接数据报,请使用 UdpClient
类。

       
那是它亦能够更高的架空程度提供TCP服务的根底。呈今后互连网数据的发送和收受地点,是TcpClient使用NetworkStream互联网流处理技术,使得它读写多少更是方便直观。TcpClient类专为客户端设计,它为
TCP 网络服务提供客户端连接。

TcpListener
类提供部分简易方法,用于在阻止同步形式下侦听和承受传入连接请求。可选择TcpClient 或 Socket 来三番五次 TcpListener。可使用 IPEndPoint、本地 IP
地址及端口号或许仅使用端口号,来创建 TcpListener。能够将当地 IP
地址钦定为 Any,将地方端口号内定为
0(如若愿意基础服务提供程序为你分配那一个值)。倘若您选取这么做,可在连接套接字后使用
LocalEndpoint 属性来标识已钦定的新闻。

{

对子孙后代的认证:  要发送和接收数据,请使用 GetStream
方法来博取叁个 NetworkStream。调用 NetworkStreamWrite
Read 方法与长途主机之间发送和接收数据。使用
Close
方法释放与 TcpClient 关联的具备能源。

(3)NetworkStream网络流:能够被视为多个数据通道,架设在数码来源端(客户Client)和接收端(服务Server)之间,通过TcpClient.GetStream方法,重返用于发送和接收数据的网络流NetworkStream。

Start 方法用来初叶侦听传入的连天请求。Start
将对传播连接举行排队,直至您调用 Stop 方法或它早已成功 马克斯Connections
排队停止。可采取 AcceptSocket 或 AcceptTcpClient
从传出连接请求队列提取连接。那三种方式将截留。要是要幸免阻止,可首先使用
Pending 方法来鲜明队列中是不是有可用的连日请求。

    class Program

 

       
注:要成立NetworkStream必须提供连接的Socket.私下认可情状下关闭NetworkStream并不会倒闭所提供的Socket.即使要关张Socket权限,则必须将ownsSocket构造函数参数的值钦赐为true.而后的数量读取及写入均指向这一个通道来进行。不协理对网络流的任意走访。

调用 Stop 方法来关闭 TcpListener。

    {

//第壹步:读取文件
            Console.WriteLine(“本程序达成向服务器发送文件…”);
的界别及关联,Socket的多个成效类TCPClient。            FileStream fs = File.Open(“D:\\xml\\ok.png”, FileMode.Open);
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, (int)fs.Length);
            fs.Close();

示范如下:通过以下方法取得NetworkStream网络流之后,就可以应用正规流读写方法Write和Read来发送和承受多少了。

下边包车型客车例子给出怎么采纳TcpListener监听客户端的乞请:

        private static int
portNum = 11000;

            //第3步:发送文书
            try
            {
                TcpClient client = new TcpClient(System.Net.Dns.GetHostName(), portNum);
                NetworkStream ns = client.GetStream();
                ns.Write(buffer, 0, buffer.Length);
                ns.Close();
                client.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }

1 TcpClient tcpClient = new TcpClient();             //创建TcpClient对象实例
2 tcpClient.Connect("www.baidu.com",4088);         //尝试与远程主机相连
3 NetworkStream stream=tcpClient.GetStream();      //获取网络传输流

using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
namespace tcpclient
{
    class Program
    {
        private const int portNum = 11000;
        static void Main(string[] args)
        {
            bool done = false;
            //TcpListener listener = new TcpListener(portNum); //依照VS2006 MSDN 此方法已经不合时宜,不再选拔
            // IPEndPoint类将网络标识为IP地址和端口号
            TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Any, portNum));
            listener.Start();
            while (!done)
            {
                Console.Write(“Waiting for connection…”);
                TcpClient client = listener.AcceptTcpClient();
                Console.WriteLine(“Connection accepted.”);
                NetworkStream ns = client.GetStream();
                byte[] byteTime = Encoding.ASCII.GetBytes(DateTime.Now.ToString());
                try
                {
                    ns.Write(byteTime, 0, byteTime.Length);
                    ns.Close();
                    client.Close();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                }
            }
            listener.Stop();
         }
    }
}

        private static string hostName = Dns.GetHostName().ToString();

 

  1. BeginRead():从NetworkStream伊始中一年级步读取
  2. BeginWrite():初始向流异步写入
  3. Close():关闭NetworkStream
  4. EndRead():处理异步读取停止
  5. EndWrite():处理异步写入甘休
  6. Flush():刷新流中的多寡
  7. Read():从流中读取
  8. ReadByte():从流中读取八个字节,并将流内的地方向前带动2个字节。到达最后,重临-1。
  9. Write():将数据写入NetworkStream
  10. WriteByte():将三个字节写入流内的眼下岗位,并将流内的地点向前拉动一个字节。

3.UdpClient

        public static void Main(String[] args)

Server:获取基础网络Socket

UdpClient 类提供了有的简练的法子,用于在拦截同步方式下发送和接到无连接
UDP 数据报。因为 UDP
是无连接传输协议,所以不须求在发送和接收数据前建立远程主机连接。但你可以挑选选择上面二种格局之一来建立暗许远程主机:

        {

  1. AcceptSocket/AcceptTcpClient:接受挂起的连天请求
  2. BeginAcceptSocket/BeginAcceptTcpClient:开始三个异步操作来接受三个流传的总是尝试
  3. Start:初阶侦听传入的接二连三请求
  4. Stop:关闭侦听

·         使用远程主机名和端口号作为参数创造 UdpClient
类的实例。

            try

Client客户端连接侦听器的三种办法:

·         创立 UdpClient 类的实例,然后调用 Connect 方法。

            {

(1)创造3个TcpClient,并调用一个可用Connect方法之一。

能够动用在 UdpClient 中提供的其余一种发送方法将数据发送到远程设备。使用
Receive 方法能够从远程主机接收数据。

               
Console.WriteLine(“主机名字:”+ Dns.GetHostName());

(2)使用远程主机的主机名和端口号创立TcpClient,此构造函数将电动尝试1个接连。

UdpClient 方法还同意发送和吸收接纳多路广播数据报。使用 JoinMulticastGroup
方法能够将 UdpClient 预约给多路广播组。使用 DropMulticastGroup
方法能够从多路广播组中收回对 UdpClient 的预定。

               
Console.WriteLine(“主机IP地址:”+ Dns.GetHostAddresses(Dns.GetHostName())[0]);

  1. Client:获取或设置基础Socket
  2. ReceiveBufferSize:获取或设置接收缓冲区的大小
  3. SendBufferSize:获取或安装发送缓冲区的分寸
  4. BeginConnect方法:起始三个对长途主机连接的异步请求
  5. Close:释放TcpClient 实例,不停歇基础连接
  6. Connect:使用钦点的主机名和端口号将客户端连接到TCP主机
  7. GetStream:再次来到用于发送和接收数据的NetworkStream

上边包车型地铁事例演示同一主机区别端口之间的UDP通讯:

                TcpClient client = new TcpClient(hostName, portNum);

创建连接TCPClient连接形式:

监听端:

               
NetworkStream ns =
client.GetStream();

(1)创制3个TcpClient,并调用多个可用的Connect()方法之一。

using System;
using System.Net.Sockets;
using System.Text;
using System.Net;
using System.Threading;
namespace Udpclient2
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                UdpClient udpClient = new UdpClient(12000);
                string returnData = ”client_end”;
                do
                {
                    Console.WriteLine(“服务器端接收数据:………………………..”);
                    IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
                    // 此处通过引用传值,获得客户端的IP地址及端口号
                    Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);
                    //此处获得客户端的数额
                    returnData = Encoding.UTF8.GetString(receiveBytes);
                    //Encoding.ASCII.GetString(receiveBytes); 此处若用ASCII,不能够正确处理汉语
                    Console.WriteLine(“This is the message server received: ” + returnData.ToString());
 
                    Thread.Sleep(3000);
                 
                    Console.WriteLine(“向客户端发送数据:………………………..”);
                    udpClient.Connect(Dns.GetHostName().ToString(), 11000);
                    // Sends a message to the host to which you have connected.
                    string sendStr = ”笔者来自服务器端:” + DateTime.Now.ToString();
                    Byte[] sendBytes = Encoding.UTF8.GetBytes(sendStr);
                    //Byte[] sendBytes = Encoding.ASCII.GetBytes(sendStr); 此处若用ASCII,无法正确处理粤语
                    udpClient.Send(sendBytes, sendBytes.Length);
                    Console.WriteLine(“This is the message server send: ” + sendStr);
 
                 } while (returnData != ”client_end”);
                
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }
}

               
byte[] bytes = new byte[1024];

  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);//创建客户端
    

客户端:

               
int bytesRead = ns.Read(bytes, 0,
bytes.Length);

 

using System;
using System.Net.Sockets;
using System.Text;
using System.Net;
namespace Udpclient
{
    class Program
    {
        static void Main(string[] args)
        {
           try
            { 
               UdpClient udpClient = new UdpClient(11000);
               
               //向服务器发送数据
               udpClient.Connect(Dns.GetHostName().ToString(), 12000);
               // Sends a message to the host to which you have connected.
               string sendStr = ”笔者来自客户端:” + Date提姆e.Now.ToString();
               Byte[] sendBytes = Encoding.UTF8.GetBytes(sendStr);
               //Byte[] sendBytes = Encoding.ASCII.GetBytes(sendStr); 此处若用ASCII,不可能正确处理汉语
               udpClient.Send(sendBytes, sendBytes.Length);
               Console.WriteLine(“This is the message client send: ” + sendStr);
                
               
               //等待服务器的答问,收到后出示答复,并甘休对话
               IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
               // 此处通过引用传值,得到客户端的IP地址及端口号
               Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);
               //此处获得劳动器端的数据
               string returnData = Encoding.UTF8.GetString(receiveBytes);
               //Encoding.ASCII.GetString(receiveBytes); 此处若用ASCII,不能够正确处理汉语
               Console.WriteLine(“This is the message come from server: ” + returnData.ToString());
               udpClient.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }
}

               
//将字节流解码为字符串

 2. void
Connect(IPAddress,int):使用钦点的IP地址和端口号将客户端连接到TcpClient主机。

               
Console.WriteLine(Encoding.ASCII.GetString(bytes, 0,
bytesRead));

 3. void Connect(string,int):将客户端连接到钦点主机上的钦定端口。

               
client.Close();

 1
TcpClient tcpClientB = new
TcpClient(“www.baidu.com”, 8888);//创立客户端 

            }

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

            catch (Exception e)

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

            {

       
注:要发送和经受多少,先采用GetStream()方法来赢得1个NetworkStream,再调用NetworkStream的Write()和Read()方法与长途主机之间发送和接收数据。最后动用Close()方法释放与TcpClient()关联的持有财富。

               
Console.WriteLine(e.ToString());

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   接受新的客户端连接   收发数据  
关闭连接

2.TcpListener    TcpListener 类提供部分简练方法,用于在阻止同步情势下侦听和收受传入连接请求。可使用
TcpClient

Socket
来连接 TcpListener。可使用
IPEndPoint、本地
IP 地址及端口号只怕仅使用端口号,来创设 TcpListener。能够将地点 IP
地址钦定为
Any,将地方端口号钦定为
0(即使期待基础服务提供程序为您分配那些值)。假如你选拔如此做,可在连接套接字后选择
LocalEndpoint
属性来标识已钦点的音讯。

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();//关闭连接

   
Start
方法用来起先侦听传入的总是请求。Start
将对传播连接进行排队,直至您调用
Stop
方法或它曾经完成 MaxConnections 排队甘休。可利用
AcceptSocket

AcceptTcpClient
从传出连接请求队列提取连接。那三种方法将阻碍。假设要制止阻止,可首先利用
Pending
(注:TcpListener类才有)方法来显著队列中是还是不是有可用的接连请求。

TcpClient创造客户端:

调用 Stop 方法来关闭
TcpListener。

 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();

上面包车型地铁事例给出怎么使用TcpListener监听客户端的伏乞: using System;

TCP与UDP的区别

using
System.Collections.Generic;

  1. TCP是面向连接的服务、UDP是面向无连接服务
  2. TCP是负有差错控制的,而UDP没有缺少可信赖性
  3. TCP的传导是固步自封的,UDP是冬日,冬辰的
  4. UDP的实时性更好,有简要,连忙、占用能源少的优点。
  5. UDP传输限定在64KB之内,Tcp一旦确立连接,就可以按统一的格式传输大批量的数目。

using System.Text;

行使UdpClient类实现UDP协议编程

using
System.Net.Sockets;

       
 由于UDP共同商议并不必要进行规定的连接,程序中能够不须要考虑连接和一些卓殊的抓获工作。在稍微对数据安全性供给不是很高的景观下行使UDP协议。

using System.Net;

       
在System.Net.Sockets命名空间下的UdpClient类,提供更直观的不难使用的性质和办法,从而降低UDP编制程序的难度。使用UdpClient时,连接的客户端须要首发送二个音讯给服务器,服务器才能和客户端通信。

namespace tcpclient

UdpClient类的构造函数有以下两种格式:

{

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

    class Program

利用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

        private const int
portNum = 11000;

利用UDPClient编程

        static void Main(string[] args)

 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();

        {

 

            bool done = false;

            //TcpListener listener = new TcpListener(portNum);
//依据VS2005MSDN 此方法已经不合时宜,不再采纳

            // IPEndPoint类将网络标识为IP地址和端口号

            TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Any, portNum));

           
listener.Start();

            while (!done)

            {

               
Console.Write(“Waiting for connection…”);

               
TcpClient client =
listener.AcceptTcpClient();

               
Console.WriteLine(“Connection accepted.”);

               
NetworkStream ns =
client.GetStream();

               
byte[] byteTime = Encoding.ASCII.GetBytes(DateTime.Now.ToString());

               
try

        
       {

                   
ns.Write(byteTime, 0, byteTime.Length);

                   
ns.Close();

                   
client.Close();

               
}

               
catch (Exception e)

               
{

                   
Console.WriteLine(e.ToString());

               
}

            }

           
listener.Stop();

         }

    }

}

 

3.UdpClient    UdpClient 类提供了一部分简单易行的章程,用于在阻止同步形式下发送和收受无连接
UDP 数据报。因为 UDP
是无连接传输协议,所以不要求在出殡和埋葬和接收数据前建立远程主机连接。但您能够挑选使用上面三种艺术之一来建立暗中同意远程主机:

·        
使用远程主机名和端口号作为参数成立 UdpClient
类的实例。

·        
创制 UdpClient
类的实例,然后调用
Connect
方法。

   能够应用在 UdpClient
中提供的任何一种发送方法将数据发送到远程设备。使用
Receive
方法能够从远程主机接收数据。    UdpClient
方法还允许发送和接收多路广播数据报。使用
JoinMulticastGroup
方法能够将 UdpClient 预约给多路广播组。使用
DropMulticastGroup
方法能够从多路广播组中收回对 UdpClient 的订座。

   上边包车型大巴例子演示同一主机不一致端口之间的UDP通讯:

监听端: using System;

using
System.Net.Sockets;

using System.Text;

using System.Net;

using System.Threading;

namespace Udpclient2

{

    class Program

    {

        static void Main(string[] args)

        {

            try

威尼斯人线上娱乐 ,            {

               
UdpClient udpClient = new UdpClient(12000);

               
string returnData = “client_end”;

               
do

               
{

                   
Console.WriteLine(“服务器端接收数据:………………………..”);

                   
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);

                   
// 此处通过引用传值,得到客户端的IP地址及端口号

                   
Byte[] receiveBytes =
udpClient.Receive(ref
RemoteIpEndPoint);

                   
//此处获得客户端的数据

                   
returnData = Encoding.UTF8.GetString(receiveBytes);

                   
//Encoding.ASCII.GetString(receiveBytes);
此处若用ASCII,不能正确处理汉语

                   
Console.WriteLine(“This is the message server received: ” +
returnData.ToString());

 

                   
Thread.Sleep(3000);

                

                   
Console.WriteLine(“向客户端发送数据:………………………..”);

                   
udpClient.Connect(Dns.GetHostName().ToString(), 11000);

     
              // Sends a message to the host
to which you have connected.

                   
string sendStr = “小编来自服务器端:” + DateTime.Now.ToString();

                   
Byte[] sendBytes = Encoding.UTF8.GetBytes(sendStr);

                   
//Byte[] sendBytes =
Encoding.ASCII.GetBytes(sendStr); 此处若用ASCII,不能够正确处理粤语

                   
udpClient.Send(sendBytes, sendBytes.Length);

                   
Console.WriteLine(“This is the message server send: ” +
sendStr);

 

                 }
while (returnData != “client_end”);

               

            }

            catch (Exception e)

            {

               
Console.WriteLine(e.ToString());

            }

        }

    }

}

 

客户端: using System;

using
System.Net.Sockets;

using System.Text;

using System.Net;

namespace Udpclient

{

    class Program

    {

        static void Main(string[] args)

        {

           try

            {

               UdpClient udpClient = new UdpClient(11000);

              

               //向服务器发送数据

              
udpClient.Connect(Dns.GetHostName().ToString(), 12000);

               // Sends a message to the host to which you have
connected.

               string sendStr = “笔者来自客户端:” + DateTime.Now.ToString();

               Byte[] sendBytes = Encoding.UTF8.GetBytes(sendStr);

               //Byte[] sendBytes =
Encoding.ASCII.GetBytes(sendStr); 此处若用ASCII,不能够正确处理汉语

              
udpClient.Send(sendBytes, sendBytes.Length);

               Console.WriteLine(“This is the message client send: ” +
sendStr);

               

              

               //等待服务器的答疑,收到后展现答复,并甘休对话

               IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);

               // 此处通过引用传值,获得客户端的IP地址及端口号

               Byte[] receiveBytes =
udpClient.Receive(ref
RemoteIpEndPoint);

               //此处获得劳动器端的多寡

               string returnData = Encoding.UTF8.GetString(receiveBytes);

               //Encoding.ASCII.GetString(receiveBytes);
此处若用ASCII,不能正确处理中文

               Console.WriteLine(“This is the message come from server: ” +
returnData.ToString());

              
udpClient.Close();

            }

            catch (Exception e)

            {

               
Console.WriteLine(e.ToString());

            }

        }

    }

}


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图