前面的几篇主要是讲使用Socket类进行网络编程。今天学习了一下TcpListener和TcpClient类的使用,这是对Socket进行了封装,这两个类会自己创建Socket对象。
使用起来比直接使用Socket要方便一点。不多说了,直接上代码:
服务器端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace tcplistener
{
class Program
{
static void Main(string[] args)
{
//[1]TcpListener对Socket进行了封装,这各类会自己创建Socket对象
TcpListener tcpListener = new TcpListener(IPAddress.Parse("172.25.14.165"), 7788);
//[2]开始进行监听
tcpListener.Start();
//[3]等待客户端连接过来
TcpClient client = tcpListener.AcceptTcpClient();
//[4]取得从客户端发来的数据
NetworkStream stream = client.GetStream();//这是一个网络流,从这个网络流可以去的从客户端发来的数据
while (true)
{
byte[] data = new byte[1024];
/*
* 0表示 从数组的哪个索引开始读取数据
* 1024 表示最大的读取数
* */
int length = stream.Read(data, 0, 1024);
string message = Encoding.UTF8.GetString(data, 0, length);
Console.WriteLine("收到了信息:" + message);
}
stream.Close();
client.Close();
tcpListener.Stop();//停止监听
Console.ReadKey();
}
}
}
客户端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace TcpClient_客户端
{
class Program
{
static void Main(string[] args)
{
TcpClient tcpClient = new TcpClient("172.25.14.165", 7788);
NetworkStream stream = tcpClient.GetStream();//通过网络流进行数据的交换
while (true)
{
//read来读取数据,write用来写入数据就是发送数据
string message = Console.ReadLine();
byte[] data = new byte[1024];
data = Encoding.UTF8.GetBytes(message);
stream.Write(data, 0, data.Length);
}
stream.Close();
tcpClient.Close();
Console.ReadKey();
}
}
}
看起来是不是比直接使用Socket要简单点。这就是面向对象封装特性的魅力所在。