应用程序可以通过TCPClient、TCPListener和UDPClient类使用传输控制协议(TCP)和用户数据文报协议(UDP)服务。
这些协议类建立在System.Net.Sockets.Socket类的基础上,负责数据传送的细节,也就是说TCPClient、TCPListener和UDPClient简化了Socket,让我们更方便的打代码。
TCPClient与TCPListener:使用NetworkStream类表示网络。使用GetStream()方法返回网络流,然后调用该流的Read和Write方法。
UDPClient:使用字节数组保存UDP数据文报。使用Send方法向网络发送数据,使用Receive方法接收传入的数据文报。
TCPClient简单代码:功能都写在了一起,如果要重复接收或者重复读取,将相关代码写进循环即可,最好用线程执行
using System;
using System.Text;
using System.Net.Sockets;
using System.Net;
namespace TCPClient
{
class Program
{
static string IP = "192.168.199.128";
static Int16 Port = 8888;
static void Main(string[] args)
{
//当我们创建TcpClient的时候,TcpClient已经帮我们和服务端建立了连接
TcpClient tcpClient = new TcpClient(new IPEndPoint(IPAddress.Parse(IP), Port));
//通过数据流进行数据交换
NetworkStream networkStream = tcpClient.GetStream();
//如何读取数据
byte[] res = new byte[1024];
//将读取的数据存入res,0表示从res数组当中的哪一位开始存,1024表示存储的最大位数
int length = networkStream.Read(res, 0, 1024);
string message = Encoding.UTF8.GetString(res, 0, length);
//如何发送消息
byte[] sendMe = Encoding.UTF8.GetBytes(message); ;
networkStream.Write(sendMe, 0, sendMe.Length);
//如何关闭
networkStream.Close();//关闭数据流
tcpClient.Close();//关闭客户端连接
}
}
}
TCPListener简单代码:同样功能都写在一起,大同小异
using System;
using System.Text;
using System.Net.Sockets;
using System.Net;
namespace TCPClientAndTCPListener
{
class Program
{
static string IP = "192.168.199.128";
static Int16 Port = 8888;
static void Main(string[] args)
{
//TcpListener其实是对Socket的一层封装,其内部会自动创建Socket对象。
TcpListener tcpListener = new TcpListener(new IPEndPoint(IPAddress.Parse(IP), Port));
//start方法表示开始监听
tcpListener.Start();
//等待客户端连接
TcpClient client= tcpListener.AcceptTcpClient();
//取得客户端发送过来的数据
NetworkStream networkStream = client.GetStream();
//如何读取数据
byte[] res = new byte[1024];
//将读取的数据存入res,0表示从res数组当中的哪一位开始存,1024表示存储的最大位数
int length = networkStream.Read(res, 0,1024);
string message = Encoding.UTF8.GetString(res, 0, length);
//如何发送消息
byte[] sendMe = Encoding.UTF8.GetBytes(message); ;
networkStream.Write(sendMe,0,sendMe.Length);
//如何关闭
networkStream.Close();//关闭数据流
client.Close();//关闭客户端连接
tcpListener.Stop();//关闭监听
}
}
}
UDP简单代码:
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace UDPClient
{
class Program
{
static string IP = "192.168.199.128";
static Int16 Port = 8888;
static void Main(string[] args)
{
//绑定IP和端口号
UdpClient udpClient = new UdpClient(new IPEndPoint(IPAddress.Parse(IP),Port));
//接收数据
IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Any, 0);
//通过iPEndPoint确定数据的来源(来源IP和来源端口)并接收数据
byte[] dataRecive = udpClient.Receive(ref iPEndPoint);
string message = Encoding.UTF8.GetString(dataRecive);
//发送数据
IPEndPoint iPEndPoint1 = new IPEndPoint(IPAddress.Parse(IP), Port);
byte[] dataScend = Encoding.UTF8.GetBytes("我是数据");
udpClient.Send(dataScend, dataScend.Length, iPEndPoint1);
//关闭
udpClient.Close();
}
}
}