Socket原理
socket通常称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
应用程序通常通过"套接字"向网络发送请求或者应答网络请求。Socket和ServerSocket类位于java.net包中。ServerSocket用于服务端,Socket是建立网络连接时是用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,实现所需的会话。获取本地地址和端口号
java.net.Socket为套接字类,其提供了很多方法,其中我们通过Socket获取本地的地址以及端口号。int getLocalPort():该方法用于获取本地使用的端口号.
InetAddress getLocalAddress():该方法用于获取套接字绑定的本地地址。
使用InetAddress获取本地的地址方法:
String getCanonicalHostName() 获取此IP地址的完全限定域名。
String getHostAddress();返回IP地址字符串(以文本表现形式)
获取本地地址和端口号
Socket socket=new Socket("localhost",8080);
InetAddress add=socket.getLocalAddress();
System.out.println(add.getCanonicalHostName());
System.out.println(add.getHostAddress());
System.out.println(socket.getLocalPort());
获取远端地址和端口号
通过Socket获取远端的地址以及端口号
int getPort(): 该方法用于获取远端使用的端口号
InetAddress.getInetAddress(): 该方法用于获取套接字绑定的远端地址
获取远端地址和端口号
Socket socket=new Socket("localhost",8080);
InetAddress inetAdd=socket.getInetAddress();
System.out.println(inetAdd.getCanonicalHostName());
System.out.println(inetAdd.getHostAddress());
System.out.println(socket.getPort());
获取网络输入流和网络输出流
通过Socket获取输入流与输出流,这两个方法是使用Socket通讯的关键方法。
InputStream getInputStream() :该方法用于返回此套接字的输入流。
OutputStream getOutputStream(): 该方法用于返回此套接字的输出流。
获取网络输入流和网络输出流
Socket socket=new Socket("localhost",8088);
InputStream in=socket.getInputStream();
OutputStream out=socket.getOutputStream();
close方法
当使用Socket进行通讯完毕后,要关闭Socket以释放系统资源
-void close():关闭此套接字。当关闭了该套接字后,也会同时关闭由此获取的输入流与输出流。
Socket通信模型
Server端ServerSocket监听
java.net.ServerSocket是运行于服务端应用程序中。通常创建ServerSocket需要指定服务端口号,之后监听Socket的连接。
//创建ServerSocket并申请服务端口8088
ServerSocket server=new ServerSocket(8080);
//方法会产生阻塞,直到某个Socket连接,并返回请求连接的Socket
Socket socket=Server.accept();
Client端Socket连接
当服务端创建ServerSocket并通过accept()方法侦听后,我们就可以通过在客户端应用程序中创建Socket来向服务端发起连接。需要注意的是,创建Socket的同时就发起连接,若连接异常会抛出异常。Socket socket=new Socket("localhost",8088);
C-S端通信模型
服务器端 客户端
创建监听服务
等待连接 <---建立连接---------连接服务器
进行通讯 <---进行通讯-------->进行通讯
关闭连接 关闭连接