美文网首页
(三)socket

(三)socket

作者: 蓝Renly | 来源:发表于2018-10-24 20:14 被阅读0次

    前面的两篇分别分析了ping和TCP/UDP,以及HTTP协议,那么作为一名程序员,如何根据这些协议去写一个Web APP呢?那在敲代码前,还需要了解一下Socket这个神奇的单词!

    Socket : 套接字,英文本意是插座的意思;

    我在维基百科查了,也百度了,也谷歌了,感觉还是很模糊~~~

    于是又看了一堆的博客,,总结以及个人理解:

    1.首先,不同的行业对于socket的定义都是不同的,在互联网中,或对程序员来说,通常是指TCP套接字.对于java程序员来说,这就是Socket(客户端)和ServerSocket(服务端)通信连接所需的两个Class嘛,也就是Socket API嘛,也就是接口嘛......其实通常,套接字是指因特网协议(IP)网络中的套接字,特别是对于传输控制协议(尤其是TCP),是用于一对一连接的协议.

    2.那么敲过socket代码,就知道建立网络通信连接至少一对端口号.

    3.本地套接字地址是由本地IP地址(for TCP and UDP, but not IP) 和端口组成;网络层通常是,网络层的"ip地址"+协议+端口;

    4.百度百科有这么一段话:套接字,用于描述IP地址和端口,是一个通信链的句柄,暂且先这么理解吧,看到后面应该就会印象深刻了;

    那么,套接字有没有类别呢?是有的.我们知道TCP/UDP根据面向连接和面向无连接做了传输层的区分,那么socket的,同样的也做了区分,下面哦从维基百科抄一下分类的概念:

    1.Datagram socket

    A Datagram sockets,also known as connectionless sockets,which use User Datagram Protocol(UDP);

    ​ 什么意思呢?就是说,这是一种数据包的套接字,是使用UDP协议的面向无连接的套接字;

    2.Stream socket

    A Stream scoket is a type of network socket which provides a connection-oriend,sequenced,and unique flow of data without record boundaries,with well-defined mechanisms fo creating and destroying connnections and for detecting errors;

    A stream socket transmits data reliably,in roder ,and with out-of-band capabilities.

    On the Internet, stream sockets are typically implemented on top of TCP so that applications can run across any networks using TCP/IP protocol. SCTP may also be used for stream sockets.

    简单的翻译一下上面的内容:

    流套接字:是一种提供面向连接的,按序的,,和没有记录的唯一的流形式数据,有已经定义好的创建和销毁连接的以及检测错误的机制;

    流套接字可以可靠的,有序的传输数据.通常子TCP协议上实现!

    3.原始套接字,这里就不说啦;

    那么,是不是有懵了呢?没关系,看张图,和昨天的TCP/UDP/HTTP/IP结合一下看

    Socket层级.PNG

    昨天说了,HTTP是应用层,那么显而易见,在HTTP和TCP/UDP之间有了这么一个socket,现在是不是脑袋里面清楚了很多了.另外,socket套接字可以让你变的独特,以至于,独特到全世界只有你一个....

    再来一张图(百度图片找的,@*@),看一下,socket怎么在程序中怎么跑的:

    TCP Socket.jpg

    先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞(注意:是阻塞哦.至于什么是阻塞什么事非阻塞,可以看一下上一篇),等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束 ;

    那么,在敲代码的时候需要注意什么呢?就是通信完毕,记得close就好了!

    算了,不想贴code上来................

    相关文章

      网友评论

          本文标题:(三)socket

          本文链接:https://www.haomeiwen.com/subject/qlzxtqtx.html