连上前面的
+
新的
Java网络通信
socket/TCP/UDP
Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一
Open-Read-Write-Close:当一个用户进程进行IO操作之前,它需要调用Open来指定并获取待操作文件或设备读取或写入的权限。一旦IO操作对象被打开,那么这个用户进程可以对这个对象进行一次或多次的读取或写入操作。Read操作用来从IO操作对象读取数据,并将数据传递给用户进程。Write操作用来将用户进程中的数据传递(写入)到IO操作对象。 当所有的Read和Write操作结束之后,用户进程需要调用Close来通知系统其完成对IO对象的使用。
流通信 流通信协议,也叫做TCP( TCP / IP )( 通常用于互联网协议 )(多媒体技术)。是一种基于连接的协议。在使用流通信之前,我们必须在通信的一对儿socket之间建立连接。其中一个socket作为服务器进行监听连接请求。另一个则作为客户端进行连接请求。一旦两个socket建立好了连接,他们可以单向或双向进行数据传输。【像打电话 总得等对方接上了之后才能说话】
数据报通信 数据报通信协议,就是我们常说的UDP。UDP是一种无连接的协议,(这就意味着我们每次发送数据报时,需要同时发送本机的socket描述符和接收端的socket描述符。因此,我们在每次通信时都需要发送额外的数据。)
【某种程度上类似发邮件 我先不用你现在是不是在线】【我发过去的信息里包含你的一些信息】
区别:
-
TCP是基于连接的协议 /建立连接这一耗时存在于TCP/
-
在UDP中,数据报数据在大小上有64KB的限制。而TCP中也不存在这样的限制。一旦TCP通信的socket对建立了连接,他们之间的通信就类似IO流,所有的数据会按照接受时的顺序读取。
-
UDP是一种不可靠的协议,发送的数据报不一定会按照其发送顺序被接收端的socket接受。然而TCP是一种可靠的协议。接收端收到的包的顺序和包在发送端的顺序是一致的。
-
简而言之,TCP适合于诸如远程登录(rlogin,telnet)和文件传输(FTP)这类的网络服务。因为这些需要传输的数据的大小不确定。而UDP相比TCP更加简单轻量一些。UDP用来实现实时性较高或者丢包不重要的一些服务。在局域网中UDP的丢包率都相对比较低。
-
TCP面向字节流,实际上是TCP把数据看成是一连串无结构的字节流;UDP是面向报文的,它没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(如IP电话,实时视频会议等)
-
每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信;
-
在Java中,对遵守TCP协议的类有ServerSocket和Socket,遵守UDP协议的类有DatagramSocket。我这里提供的聊天室项目,是基于TCP协议的。
-
emmmm前者比后者要用的广泛很多
直接一点点:
1)套接字Socket的参数不同;
(2)UDP不需要调用listen和accept;
(3)UDP收发数据分别用send()和receive()方法;
(4)TCP:地址信息在connect和accept时确定;
(5)UDP:在send()和receive()方法中每次均需指定地址信息。
等等等等插一下:发现个好东西
当前,互联网 体系结构的参考模型主要有两种,一种是OSI参考模型,另一种是TCP/IP参考模型。
一、OSI参考模型,即开放式通信系统互联参考模型(OSI/RM,Open Systems Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSI。
OSI参考模型将实现网络互连的通信协议分为7层,自上而下分别是:
第7层应用层:OSI中的最高层,为用户提供各项互联网应用,如公司老板通过浏览器上网、发送电子邮件等。 常见的协议有:HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。
第6层表示层:相当公司中替老板写信的助理。
第5层会话层:相当于公司中收寄信、写信封与拆信封的秘书。
第4层传输层:提供终端到终端的可靠连接,相当于公司中跑邮局的送信职员。
第3层网络层: 确保信件通过一系列路由到达目的地。
第2层数据链路层: 决定访问网络介质的方式,并处理流控制。
第1层物理层:处于OSI参考模型的最底层,物理层的主要功能是利用物理传输介质为数据链路层提供物理连接,以便透明地传输比特流;该层的常用设备有网卡、集线器、中继器、调制解调器、网线、双绞线、同轴电缆等各种物理设备。
数据发送时,从第七层传到第一层,接收数据则相反。
上三层总称为“应用层”,用来控制软件方面;下四层总称为“数据流层”,用来管理硬件。除了物理层之外,其他层都是用软件实现的。
二、TCP/IP参考模型。
第四层应用层:协议有DNS、FTP、HTTP、HTTPS、Telnet、SMTP等;
第三层传输层:TCP、UDP等;
第二层网际层: IP、ICMP等;
第一层网络接口层:ARP、RARP等
我再也不在在大晚上听宗教歌曲了....
我们的socket:总之套接字Socket=(IP地址:端口号)
传输层实现端到端的通信,因此,每一个传输层连接有两个端点,传输层连接的端点叫做套接字(socket)
套接字可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点。通信时,其中的一个网络应用程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过网络接口卡的传输介质将这段信息发送给另一台主机的Socket中,使这段信息能传送到其他程序中。因此,两个应用程序之间的数据传输要通过套接字来完成。
如果开始编程的话 是很明显分为2个part
-
server
int port = 8919;
ServerSocket server = new ServerSocket(port); //注意服务器是server socket
Socket socket = server.accept(); //等着客户端那边连 这边就堵啦 看书 -
client
String host = "127.0.0.1";
int port = 8919;
Socket client = new Socket(host, port); //你要连谁 注意客户端就是socket了几个点:
-
accept()
你可以想象发生这样的事情:有人从很远的地方通过一个你在侦听 (listen()) 的端口连接 (connect()) 到你的机器。它的连接将加入到等待接受 (accept()) 的队列中。你调用 accept() 告诉它你有空闲的连接。它将返回一个新的套接字文件描述符!这样你就有两个套接字了,原来的一个还在侦听你的那个端口,新的在准备发送 (send()) 和接收 ( recv()) 数据。
重点是他是在服务器的代码里,位于listen函数之后,默认会阻塞进程,直到有一个客户请求连接
他的返回值是一个新的套接字,就是跟刚刚请求连接的客户端的,之后用这个套接字和该客户说话
emmm关于 accept函数产生的socket有没有占用新的端口 有点小小的挣扎
-
connect()
-
具体的通信大家都是一样的,涉及到的是IO流
我已经可以精准听出网易云付费歌曲的味道了
小小的add一下:
关于握手的解释:发现这个网站还可以:http://c.biancheng.net/view/2351.html 我感谢他的广告不是亮闪闪的TT
来源:oschina
链接:https://my.oschina.net/u/4263748/blog/4179867