TCP 是面向连接的传输协议
面向连接,其实就好比,A打电话给B,如果B接听了,那么A和B之间就的通话,就是面向连接的
TCP 是全双工的传输协议
全双工,这个理解起来也很简单,A打电话给B,B接听电话,那么A可以说话给B听,同样B也可以给A说话,不可能只允许一个人说话.
TCP 是点对点的
点对点,这个看了上面的举例相比大家都知道了,还要说一点的是,如果在A和B打电话过程中,B又来了一个紧急电话,那么B就要将与A的通话进行通话保持,所以不管怎么讲同一个连接只能是点对点的,不能一对多。
TCP 是可靠地数据传输
可靠地,一旦建立了连接,数据的发送一定能够到达,并且如果A说“你好吗?” B不会听到“吗你好”,这就是可靠地数据传输
说完了TCP的诸多优点,再说说TCP的另一个重要的合作伙伴:套接字(Socket)
好吧,说实话我不知道如何形象的说套接字,或许我不太理解的缘故,粗略的说一下吧,TCP是传输层的协议,用于数据传送的,在我们编写短信时,短信窗口其实就是一个应用程序,当我们发送短信时,短信从应用程序滚到传输通道,应用程序和传输通道间就存在一个套接字的东西,没有套接字,应用程序就无法将短信滚到传输通道。额...感觉灰常别扭。
如果想清楚的了解套接字是什么 请大家移步 C#网络编程
引用一段话作为过渡
得益于.Net 对套接字进行的封装,我们可以很简单的写一下简单的基础例子,关于TCP协议,通常将发起请求连接的一方为客户端,另一端为服务端
简单服务端代码:
IPAddress ip = IPAddress.Parse("127.1.1.1");//服务端地址 TcpListener server = new TcpListener(ip,8005);//侦听的端口号 server.Start();//开始侦听
其实服务端就像是某机场,某机场的地址就是服务端地址,机场的某条降落跑道就是服务端监听的端口号
客户端代码:
IPAddress ip = IPAddress.Parse("127.1.1.1"); TcpClient client = new TcpClient(); client.Connect(ip, 8005);
看了以上代码,就很明白是怎么回事了,飞机要飞往某个机场肯定要先知道某机场的地址,和机场允许该飞机降落的跑道号,一且都知道了,那么就飞过去,降落吧,嘿嘿
有了以上代码,客户端就可以连接服务端了,但是服务端是如何知道已经于一个客户端连接了呢?
在服务器端开始侦听以后,可以在TcpListener实例上调用AcceptTcpClient()来获取与一个客户端的连接,它返回一个TcpClient类型实例
TcpClient client = server.AcceptTcpClient();//server 就是TcpListener的实例
TcpListener 就像一个酒店的前台,可以接受很多对象的连接,职责很单一,就是接受连接请求,将连接请求对象交给TcpClient,然后继续最自己接待引导的工作。
第一篇学习记录就到这,其中不足,或错的地方,希望看过的能够指正,谢谢了~