Socket网络编程,C#对TCP协议和UDP协议的封装(TCPClient、TCPListener、UDPClient)

应用程序可以通过TCPClientTCPListenerUDPClient类使用传输控制协议(TCP)用户数据文报协议(UDP)服务。

这些协议类建立在System.Net.Sockets.Socket类的基础上,负责数据传送的细节,也就是说TCPClientTCPListenerUDPClient简化了Socket,让我们更方便的打代码。

TCPClientTCPListener:使用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();

        }
    }
}

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值