利用TcpClient,简单的tcp消息收发

TcpClient和以前学过的对象,相对关系示意图如下:

利用TcpClient,简单的tcp消息收发

 

借助有连接的特性,它封装了很多需要一起使用的对象,用起来也更加方便。

作为服务端时,它一般配合TcpListener使用。

由监听者创建的所有客户端,都使用与监听者相同的ipendpoint。(实现上,可以理解为不同的socket指向相同的ipendpoint)

例:

说明:服务端有一个监听者(TcpListener),接收到连接请求后,建立连接给一个客户端(TcpClient)。

利用流读取器(StreamReader)获取传递过来的信息并显示。

客户端建立一个客户端对象(TcpClient),连接服务端后就可以利用流写入对象(StreamWriter)发送数据。

代码如下:

服务端:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.Net;
 7 using System.Net.Sockets;
 8 using System.IO;
 9 
10 namespace ConsoleApp1
11 {
12     class Program
13     {
14         static void Main(string[] args)
15         {
16             TcpListener listener = new TcpListener(IPAddress.Any, 9000);
17             TcpClient client = new TcpClient();
18             StreamReader sr;
19             string msg;
20             listener.Start();
21             client = listener.AcceptTcpClient();
22             sr = new StreamReader(client.GetStream());
23             do
24             {
25                 msg = sr.ReadLine();
26                 Console.WriteLine(msg);
27             } while (msg.ToLower()!="exit");
28         }
29     }
30 }

客户端:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.IO;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpClient tcp = new TcpClient();
            string msg;
            IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9000);
            tcp.Connect(iPEndPoint);
            StreamWriter sw = new StreamWriter(tcp.GetStream());
            do
            {
                msg = Console.ReadLine();
                sw.WriteLine(msg);
                sw.Flush();
            } while (msg.ToLower()!="exit");
        }
    }
}

运行效果:

利用TcpClient,简单的tcp消息收发

 

上一篇:Tcp连接方式


下一篇:我只需要关心它的流,就必须存储一个TcpClient吗?