TcpListener和TcpClient

TcpListener

TcpListener 类提供一些简单方法,用于在阻止同步模式下侦听和接受传入连接请求。可使用 TcpClient 或 Socket 来连接 TcpListener。可使用 IPEndPoint、本地 IP 地址及端口号或者仅使用端口号,来创建 TcpListener。可以将本地 IP 地址指定为Any,将本地端口号指定为 0(如果希望基础服务提供程序为您分配这些值)。如果您选择这样做,可在连接套接字后使用LocalEndpoint 属性来标识已指定的信息。

Start 方法用来开始侦听传入的连接请求。Start 将对传入连接进行排队,直至您调用 Stop 方法或它已经完成 MaxConnections 排队为止。可使用 AcceptSocket 或 AcceptTcpClient 从传入连接请求队列提取连接。这两种方法将阻止。如果要避免阻止,可首先使用 Pending 方法来确定队列中是否有可用的连接请求。

调用 Stop 方法来关闭 TcpListener。

TcpClient

TcpClient 类提供了一些简单的方法,用于在同步阻止模式下通过网络来连接、发送和接收流数据。为使 TcpClient 连接并交换数据,使用 TCP ProtocolType 创建的 TcpListener 或 Socket 必须侦听是否有传入的连接请求。可以使用下面两种方法之一连接到该侦听器:

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

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

给继承者的说明要发送和接收数据,请使用 GetStream 方法来获取一个 NetworkStream。调用 NetworkStream 的 Write 和Read 方法与远程主机之间发送和接收数据。使用 Close 方法释放与 TcpClient 关联的所有资源。

使用TcpListener和TcpClient通信

服务端:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace TCPListenerServer
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Parse("192.168.1.201"),7788));

            listener.Start ();

            TcpClient client = listener.AcceptTcpClient ();
            NetworkStream stream = client.GetStream ();
            byte[] data = new byte[1024];
            while (true) {
                if (!client.Connected) {
                    Console.WriteLine ("客户端断开");
                    client.Close ();
                    stream.Close ();
                    break;
                }
                int length = stream.Read (data, 0, 1024);
                string message = Encoding.UTF8.GetString (data,0,length);
                Console.WriteLine ("收到客户端的消息" + message);
            }

            listener.Stop ();
            client.Close ();
            stream.Close ();

            Console.ReadKey ();
        }
    }
}

客户端

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace MyTCPClient
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            TcpClient client = new TcpClient ("192.168.1.201", 7788);
            NetworkStream stream = client.GetStream ();

            while (true) {
                if (!client.Connected) {
                    client.Close ();
                    stream.Close ();
                    break;
                }
                string message = Console.ReadLine ();
                byte[] data = Encoding.UTF8.GetBytes (message);
                stream.Write (data, 0, data.Length);
            }

            stream.Close ();
            client.Close ();
            Console.ReadKey ();
        }
    }
}

results matching ""

    No results matching ""