前面的两篇分别分析了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上来................
网友评论