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提供了两个类将对套接字的编程进行了一个封装,这两个类是TcpClient和TcpListener,
TcpListener用于接受连接请求,而TcpClient则用于接收和发送流数据。TcpListener持续地保持对端口的侦听,一旦收到一个连接请求后,就可以获得一个TcpClient对象,而对于数据的发送和接收都有TcpClient去完成。此时,TcpListener并没有停止工作,它始终持续地保持对端口的侦听状态。----张子阳《C#网络编程(基本概念和操作) - Part.1》

引用一段话作为过渡

得益于.Net 对套接字进行的封装,我们可以很简单的写一下简单的基础例子,关于TCP协议,通常将发起请求连接的一方为客户端,另一端为服务端

简单服务端代码:

IPAddress ip = IPAddress.Parse("127.1.1.1");//服务端地址
TcpListener server = new TcpListener(ip,);//侦听的端口号
server.Start();//开始侦听

其实服务端就像是某机场,某机场的地址就是服务端地址,机场的某条降落跑道就是服务端监听的端口号

客户端代码:

IPAddress ip = IPAddress.Parse("127.1.1.1");
TcpClient client = new TcpClient();
client.Connect(ip, );

看了以上代码,就很明白是怎么回事了,飞机要飞往某个机场肯定要先知道某机场的地址,和机场允许该飞机降落的跑道号,一且都知道了,那么就飞过去,降落吧,嘿嘿

有了以上代码,客户端就可以连接服务端了,但是服务端是如何知道已经于一个客户端连接了呢?

在服务器端开始侦听以后,可以在TcpListener实例上调用AcceptTcpClient()来获取与一个客户端的连接,它返回一个TcpClient类型实例

TcpClient client = server.AcceptTcpClient();//server 就是TcpListener的实例

TcpListener 就像一个酒店的前台,可以接受很多对象的连接,职责很单一,就是接受连接请求,将连接请求对象交给TcpClient,然后继续最自己接待引导的工作。

第一篇学习记录就到这,其中不足,或错的地方,希望看过的能够指正,谢谢了~

C#网络编程之--TCP协议(一)的更多相关文章

  1. C#网络编程之---TCP协议的同步通信(二)

    上一篇学习日记C#网络编程之--TCP协议(一)中以服务端接受客户端的请求连接结尾既然服务端已经与客户端建立了连接,那么沟通通道已经打通,载满数据的小火车就可以彼此传送和接收了.现在让我们来看看数据的 ...

  2. 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  3. 网络编程--使用TCP协议发送接收数据

    package com.zhangxueliang.tcp; import java.io.IOException; import java.io.OutputStream; import java. ...

  4. 网络编程: 基于TCP协议的socket, 实现一对一, 一对多通信

    TCP协议  面向连接 可靠的 面向字节流形式的 tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 TCP协议编码流程: 服务器端:                 客户端 实例化对 ...

  5. C# socket网络编程 基于TCP协议

    socket 服务器端: 1.创建socket Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ...

  6. Java学习笔记53(网络编程:TCP协议案例)

    简易的案例 客户端: package demo; import java.io.IOException; import java.io.InputStream; import java.io.Outp ...

  7. 【网络编程1】网络编程基础-TCP、UDP编程

    网络基础知识 网络模型知识 OSI七层模型:(Open Systems Interconnection Reference Model)开放式通信系统互联参考模型,是国际标准化组织(ISO)提出的一个 ...

  8. 嵌入式linux的网络编程(1)--TCP/IP协议概述

    嵌入式linux的网络编程(1)--TCP/IP协议概述 1.OSI参考模型及TCP/IP参考模型 通信协议用于协调不同网络设备之间的信息交换,它们建立了设备之间互相识别的信息机制.大家一定都听说过著 ...

  9. 【转载】[基础知识]【网络编程】TCP/IP

    转自http://mc.dfrobot.com.cn/forum.php?mod=viewthread&tid=27043 [基础知识][网络编程]TCP/IP iooops  胖友们楼主我又 ...

随机推荐

  1. BZOJ 3932 [CQOI2015]任务查询系统 ——可持久化线段树

    [题目分析] 主席树,维护区间大小以及权值之和. 但是细节确实要琢磨很久,WA了几次. [代码] #include <cstdio> #include <cstring> #i ...

  2. 关于window.showModalDialog的一些配置

    关于window.showModalDialog的一些配置 一.window.showModalDialog的滚动条 其实纵向滚动条很好去掉,难办的就是横向滚动条.在Firefox下如果window. ...

  3. Oracle PL/SQL设置快捷键的方法

    pl sql默认设置不是很方便,最近搜罗了一下网上关于PLSQL的一些常用快捷键配置,主要是方便以后自个使用 1.登录后默认自动选中My Objects   默认情况下,PLSQL Developer ...

  4. CSS的clip-path

    在Web网页中主要是以矩形分布的.而平面媒体则倾向于更多不同的形状.造成这种差异的原因是因为缺少合适的工具去实现我们平面媒体中的内容.这也就造成了很多设计师的创意发挥,就算是有创意,前端实现也将付出巨 ...

  5. iOS socket TCP UDP

    TCP: 服务器: #import <Foundation/Foundation.h> #include <sys/socket.h> #include <netinet ...

  6. Python基础6- 流程控制之if条件语句

    Python条件语句是通过判断一条或多条条件语句的执行结果来决定执行哪条代码块的.Python 中if 语句用于控制程序的执行,基本形式为:if 判断条件: 执行语句……else: 执行语句…… #c ...

  7. 【HDU】3506 Monkey Party

    http://acm.hdu.edu.cn/showproblem.php?pid=3506 题意:环形石子合并取最小值= =(n<=1000) #include <cstdio> ...

  8. HDU 4503 湫湫系列故事——植树节(单色三角形)

    题目链接 #include <cstdio> using namespace std; int main() { int n,sum,a,t,i; scanf("%d" ...

  9. RSA_RSA算法原理(二)

    上一次,我介绍了一些数论知识. 有了这些知识,我们就可以看懂RSA算法.这是目前地球上最重要的加密算法. 六.密钥生成的步骤 我们通过一个例子,来理解RSA算法.假设爱丽丝要与鲍勃进行加密通信,她该怎 ...

  10. 利用iframe将div放置在object的上面

    这两天在写一个用object上传照片的网页,在上传时,需要弹出一个进度条的div,我就按照正常的思维模式,将进度条div设为绝对定位,将其z-index设置的很大,结果,进度条div被object给遮 ...