您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > socket和ssl简介
Socket初印象Socket原意是插座、插口。取此之意就是一个可以连接上就可以使用的“插口”。所谓socket通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网络发出请求或者应答网络请求。它是基于TCP/IP协议的应用程序之间的通信方式。最早用于unix的信息传递。在windows系统中称为“winsock”。他分为服务端、客户端。而这两方就像发电机和用电设备,双方需要接线板、插头连接起来才能给电、用电。请求连接响应连接Socket图解三次握手四次挥手Socket原理在服务端与客户端需要建立通信时,先由服务端开启服务(长监听),再由客户端根据服务端的ip地址及开放的端口向它发起连接请求,当服务端监听到请求(满足连接条件)后,接受客户端的请求,双方建立连接。建立的连接分为两种:同步方式(Blocking)和非同步方式(noBlocking)。双方发送的信息可以是文本,也可以是二进制数据流的形式。当客户端的消息到达服务端端口时,会自动触发一个事件(event),服务方只要接管该事件,就可以接受来自客户方的消息。Socket流程步骤模型范讲首先通讯双方各有一台电话机,在上述模型中就是Socket;(1)通讯一方拔打电话,试图建立连接,在上述模型中就是客户端建立JavaSocket对象;另一方随时监听有没有呼叫,当有呼叫到来(考虑有必要接听)时,摘机,在上述模型中就是在服务器端建立一个JavaSocket对象,然后用其accept()方法监听客户端的连接请求,当有连接请求时accept方法返回客户端的Socket,于是双方就建立起连接;(2)双方通话,过程中双方都可以说和听,在上述模型中,每个Socket可以利用输入输出流进行读和写两种操作;在电话中一方听到的是对方说出的,反之亦然;上述模型中,一方读出的也是对方写入的,而写入的则是对方要读出的(3)挂断close()。Socket对应JavaAPI1、Socket和ServerSocket类库位于java.net包中。2、ServerSocket用于服务器端server,Socket是建立网络连接时使用的(即客户端client)。3、在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。4、主要方法:accept()、getInputStream()、getOutputStream()主要方法详解Accept方法用于产生阻塞,直到接受到一个连接,并且返回一个客户端的Socket对象实例。阻塞是一个术语,它使程序运行暂时停留在这个地方,直到一个会话产生,然后程序继续;通常阻塞是由循环产生的。.getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例,。.getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用Socket流程步骤代码详解(1)1、服务端指定端口(port):ServerSocketss=newServerSocket(8888);2、服务端启动长监听:Socketssocket=ss.accept();3、客户端申请对服务器的指定端口建立连接:Socketcsocket=newSocket(“1.1.1.9”,8888);注:提醒一下,服务器开启的端口是有讲究的,端口的分配必须是唯一的。因为端口是为了唯一标识每台计算机唯一服务的,另外端口号是从0~65535之间的,而前1024个端口已经被Tcp/Ip作为保留端口,因此你所分配的端口只能是1024个之后的,不要和已开启的端口冲突。Socket流程步骤代码详解(2)4、服务器接受请求双方建立连接;开始互发信息:4-1、确定双方发送数据的传输形式:BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);4-2、双方对话,互发信息:接收:in.readLine();发送:out.println(“xxx”);或者out.write(“xxx”)关于服务端代码示例首先他引入了1、实现网络应用程序提供类java.net.*2、数据输入输出提供类java.io.*classMyServer{publicstaticvoidmain(String[]args)throwsIOException{ServerSocketss=newServerSocket(8888);//创建绑定到特定端口的服务器套接字。监听连接Socketssocket=ss.accept();//侦听并接受到此套接字的连接。此方法在进行连接之前一直阻塞。if(ssocket.isConnected())//判断是否建立了连接System.out.println(建立连接...);try{BufferedReaderin=newBufferedReader(newInputStreamReader(ssocket.getInputStream()));//接收的数据流PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(ssocket.getOutputStream())),true);//发送的数据流while(true){Stringstr=in.readLine();System.out.println(客户端说:+str);if(str.equals(o))break;System.out.print(服务端说:);BufferedReaderis=newBufferedReader(newInputStreamReader(System.in));//输入要发送的数据流Stringinput=newString();input=is.readLine();out.println(input);out.flush();if(input.equals(o))break;}}catch(Exceptione){e.printStackTrace();}finally{ssocket.close();ss.close();}}}关于客户端代码示例classMyClient{publicstaticvoidmain(String[]args)throwsIOException{Socketsocket=newSocket(InetAddress.getLocalHost(),8888);//Socket(Stringip,intport)方法申请连接客户端不用指定具体的端口,他会被动态的分配一个1024以上的端口。if(socket.isConnected())System.out.println(建立连接...);try{BufferedReaderis=newBufferedReader(newInputStreamReader(System.in));PrintWriterout=newPrintWriter(socket.getOutputStream(),true);while(true){System.out.print(客户端说-c:);Stringinput=newString();input=is.readLine().trim();out.println(input);if(input.equals(o))break;BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));Stringstr=in.readLine();System.out.println(服务端说-c:+str);out.flush();}}finally{socket.close();}}}关于其他socket的功能方法传递图片、传递视频、传递音频、多线程并发等功能日后有机会大家再深入研究。Ssl初印象1、SSL(SecuritySocketLayer全称是加密套接字协议层)――Securesocketlayer(SSL)协议最初由Netscape企业发展,现已成为网络用来鉴别网站和网页浏览者身份,以及在浏览器使用者及网页服务器之间进行加密通讯的全球化标准。由于SSL技术已建立到所有主要的浏览器和WEB服务器程序中,因此,仅需安装数字证书,或服务器证书就可以激活服务器功能了。SSL是一种基于证书的协议,任何运行SSL服务的服务器都需要自己的证书。通常为了保证通用性,我们会向证书颁发机构(CertificateAuthority,简称CA,如VeriSign、Thawte等等)申请证书,但这需要一笔费用。对于小型组织的内部邮件服务器而言,我们完全可以使用自行建立的证书颁发机构和证书来实现我们的需求。SSL单向、双向认证单向认证:客户端向服务器发送消息,服务器接到消息后,用服务器端的密钥库中的私钥对数据进行加密,然后把加密后的数据和服务器端的公钥一起发送到客户端,客户端用服务器发送来的公钥对数据解密,然后在用传到客户端的服务器公钥对数据加密传给服务器端,服务器用私钥对数据进行解密,这就完成了客户端和服务器之间通信的安全问题,但是单向认证没有验证客户端的合法性。双向认证:(1)客户端向服务器发送消息,首先把消息用客户端证书加密然后连同时把客户端证书一起发送到服务器端(2)服务器接到消息后用首先用客户端证书把消息解密,然后用服务器私钥把消息加密,把服务器证书和消息一起发送到客户端(3)客户端用发来的服务器证书对消息进行解密,然后用服务器的证书对消息加密,然后在用客户端的证书对消息在进行一次加密,连同加密消息和客户端证书一起发送到服务器端,(4)到服务器端首先用客户端传来的证书对消息进行解密,确保消息是这个客户发来的,然后用服务器端的私钥对消息在进行解密这个便得到了明文数据。SSL示意图SSL通讯说明(1)在该部分,将对图1所示的示意图进行说明。为了说明的方便,在本文中称客户端为B,服务器端为SSTEP1:B——〉S(发起对话,协商传送加密算法)你好,S!我想和你进行安全对话,我的对称加密算法有DES,RC5,我的密钥交换算法有RSA和DH,摘要算法有MD5和SHA。STEP2:S——〉B(发送服务器数字证书)你好,B!那我们就使用DES-RSA-SHA这对组合进行通讯,为了证明我确实是S,现在发送我的数字证书给你,你可以验证我的身份。STEP3:B——〉S(传送本次对话的密钥)(检查S的数字证书是否正确,通过CA机构颁发的证书验证了S证书的真实有效性后。生成了利用S的公钥加密的本次对话的密钥发送给S)S,我已经确认了你的身份,现在将我们本次通讯中使用的对称加密算法的密钥发送给你。STEP4:S——〉B(获取密钥)(S用自己的私钥解密获取本次通讯的密钥)。B,我已经获取了密钥。我们可以开始通信了。STEP5:S——B(进行通讯)SSL通讯说明(2)说明:一般情况下,当B是保密信息的传递者时,B不需要数字证书验
本文标题:socket和ssl简介
链接地址:https://www.777doc.com/doc-3183631 .html