一、什么是TCP
二、 Tcp的连接和断开
三、TCP通过什么方式提供可靠性
四、TCP编码部分
4.1 TcpListener (服务端)
using System.Net.Sockets;
using System.Net;
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
//创建服务器端,监听客户端
public static void Main(string[] args)
{
IPAddress ip = IPAddress.Parse("127.0.0.1");
int port = 5566;
TcpListener sever=new TcpListener(ip,port);
sever.Start();//开启之后才能执行下面的监听
sever.AcceptTcpClient();//监听客户端的连接
}
}
}
4.2 TCPClient(客户端)
using System.Net.Sockets;
using System.Net;
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
//创建客户端,连接服务器,读取写入数据
public static void Main(string[] args)
{
IPAddress ip = IPAddress.Parse("127.0.0.1");
int port = 5566;
TcpClient client=new TcpClient();
client.Connect(ip,port);//客户端连接服务器端
//当服务器端与客户端连接上之后,就该获取两个计算机之间传递的数据,
// NetworkStream stream = client.GetStream();
//发送和接收都会用到数据流
// stream.Read();
// stream.Write();
// client.GetStream();// 可以从数据流中获取.获取数据流的方法,
}
}
}
五、 UDP协议
UDP协议不分服务器与客户端的区别,它并不是由一台机器向一台主机器传,UDP先是以数据报的模式扔到网上,自己去下载就可以了,所以UDP协议接收与发送都是Client。如下所示:
using System;
using System.Net.Sockets;
using System.Net;
using System.Reflection;
using System.Text;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
public static void Main(string[] args)
{
UDPtest.Start();
}
}
class UDPtest
{
//一个类中既要收又要发数据的话需要线程来辅助,不然会堵塞
public static void Start()
{
UdpClient client=new UdpClient(new IPEndPoint(IPAddress.Any,0));
IPEndPoint endpoint=new IPEndPoint(IPAddress.Parse("255.255.255.255"),7788);
//服务端把一句话发送给客户端
byte[] buf= Encoding.Default.GetBytes("Hello world"); //字符串进行转化成想要的字节流
Thread tr=new Thread( new ThreadStart(Receive));//开启线程调用另一个协程
tr.IsBackground = true;//确保开启的线程是主线程
tr.Start();
while (true)//循环,连着发送数据
{
client.Send(buf, buf.Length, endpoint);//向谁发送多长的字节
Thread.Sleep(1000);//每隔一秒休眠一下
}
}
//接收数据
static void Receive()
{
UdpClient client=new UdpClient(new IPEndPoint(IPAddress.Any,7788));
IPEndPoint endpoint=new IPEndPoint(IPAddress.Parse("255.255.255.255"),0);
while (true)//因为是循环发送,我们就循环接收
{
byte[] buf= client.Receive(ref endpoint);//接收数据,把终结点传进来
string mess = Encoding.Default.GetString(buf);
Console.WriteLine(mess);
}
}
}
}
运行打印结果:
六、Tcp与Udp的区别
TCP是传输控制协议,UDP是用户数据报协议,两者是相对应的协议。
解释: Tcp是基于连接,Udp是基于非连接。
使用TCP时在正式收发数据前,必须与对方进行可靠的连接。一个TCP连接必须经过三次对话才能够建立起来,过程比较复杂。
UDP不与对方进行连接而是直接把数据包发送过去。基于这种情况UDP发送数据可能会丢包不安全。