SOCKET 解决问题 : 客户端 到 服务端 进行通信(TCP/IP 协议)
客户端 : java.net.Socket client = new Socket("127.0.0.1",80) ; 创建一个链接 IP 127.0.0.1 ,端口号80 的请求链接(底层已经调用connect() )。
服务端 : java.net.ServeSocket serve = new ServeSocket(80) ; 创建一个监听80端口的本地服务( 已经调用blind() )。
客户端与服务端有了 ,那么问题来了: 她们是如何建立连接进行通信(传输数据)的呢 ?
首先对于TCP/IP 协议,大家知道可靠连接是有3次握手的(客户端请求连接允许,服务器端发送允许链接,客户端发送链接请求),相对应的:
1、服务端已经做好客户端请求链接允许的准备:java.net.Socket socket = serve.accept() , serve会一直处于阻塞状态,直到请求来到。 (可简单启动main方法,debug 看程序加载到这行后还往下走么?)
2、客户端请求链接允许 :client.connect() , 如上面讲的,一般初始化的时候就已经connect(),所以不需要我们自己再调用。
3、服务端回复允许链接 : serve.accept()接收到消息,线程继续下走,client端也开始往下走,表示socket已经联通。
4、链接成功,那么通信 : 大家注意步骤一中标红处,serve.accept()返回的是连接的Socket,也就是客户端的socket,这样客户端就可以和服务端进行通信了 。socket有写入写出流进行消息通信 : Socket.getInputStream() 与 Socket.getOutputStream()。客户端