构造方法:java
1.使用构造方法 public ServerSocket(int port) 和public ServerSocket(int port,int backlog)windows
建立ServerSocket对象,则客户端能够使用服务器任意的IP链接到ServerSocket对象中。服务器
2. 使用public ServeSocket(int port,int backlog,InetAddress bindAddr)构造方法中的参数bindAddr建立ServerSocket对象后,socket
客户端想要链接到服务端,则客户端Socket的构造方法的参数要写上与ServerSocket构造方法的参数bindAddr相同的IP地址,测试
否则就会出现异常。spa
绑定指定的Socket地址:.net
public void bind(SocketAddress endpoint)方法的主要做用是将ServerSocket绑定到特定的Socket地址(IP地址和端口号),code
使用这个地址与客户端进行通讯。若是地址为null,则系统将挑选一个临时的端口和一个有效的本地地址来绑定套接字。server
SocketAddress自己是一个抽象类,表明Socket地址;而InetAdress类表明IP地址。对象
InetAddress构造方法:
1.public InetSocketAddress(int port)的做用是建立套接字地址,其中IP地址为通配符地址,端口号为指定值。有效端口0~65535之间;
端口号传入0表明bind操做中随机挑选空闲的端口。
2:public InetSocketAddress(String hostname,int port的做用是根据主机名和端口号建立套接字地址。
3:public InetSocketAddress(InetAddress addr,int port)的做用根据IP地址和端口号建立套接字地址。
Server.java
package com.company.s8; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; public class Server { public static void main(String[] args) { try { ServerSocket serverSocket=new ServerSocket(); serverSocket.bind(new InetSocketAddress(8888)); System.out.println("server begin accept"); serverSocket.accept(); System.out.println("server end accept"); }catch (IOException e){ e.printStackTrace(); System.out.println("catch "+System.currentTimeMillis()); } } }
Client.java
package com.company.s8; import java.net.Socket; public class Client { public static void main(String[] args) { try { System.out.println("client request begin"); Socket socket=new Socket("localhost",8888); System.out.println("client request end"); }catch (Exception e){ e.printStackTrace(); } } }
getLocalSocketAddress()获取bending的SocketAddress对象,返回此Socket绑定的端点的地址,若是还没有绑定,则返回null.
getLocalPort()方法用来获取Socket绑定到本地的端口。
package com.company.s12; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; public class Server { public static void main(String[] args) throws IOException { ServerSocket serverSocket=new ServerSocket(); System.out.println("new ServerSocket 无参构造的端口是:"+serverSocket.getLocalPort()); //windows再dos窗口ipconfig获取 serverSocket.bind(new InetSocketAddress("192.168.0.101",8888)); System.out.println("bind方法以后的端口是:"+serverSocket.getLocalPort()); InetSocketAddress inetSocketAddress=(InetSocketAddress) serverSocket.getLocalSocketAddress(); System.out.println("inetSocketAddress.getHostName="+inetSocketAddress.getHostName()); System.out.println("inetSocketAddress.getHostString="+inetSocketAddress.getHostString()); System.out.println("inetSocketAddress.getPort="+inetSocketAddress.getPort()); serverSocket.close(); } }
SocketAddress与InetAddress本质的区别是SocketAddress不基于任何协议。
Server.java
package com.company.s12_1; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws IOException { ServerSocket serverSocket=new ServerSocket(); InetAddress inetAddress=InetAddress.getByName("localhost"); InetSocketAddress inetSocketAddress=new InetSocketAddress(inetAddress,8888); serverSocket.bind(inetSocketAddress); System.out.println("server begin"); Socket socket=serverSocket.accept(); System.out.println("server end"); socket.close(); serverSocket.close(); } }
Client.java
package com.company.s12_1; import java.io.IOException; import java.net.Socket; public class Client { public static void main(String[] args) throws IOException { System.out.println("client begin"); Socket socket=new Socket("localhost",8888); System.out.println("client end"); } }
getHostName()和getHostString()方法的区别
getHostName()方法的做用是获取主机名。注意,若是地址是字面IP地址建立的,则此方法可能触发名称服务反向查找,也就是DNS服务经过IP找到域名。
getHostString()方法的做用是返回住居名或地址的字符串形式,若是它没有主机名,则返回IP地址。这样作的好处是不尝试返回查找。
package com.company.s12_2; import java.net.InetSocketAddress; public class Server { public static void main(String[] args) { InetSocketAddress inetSocketAddress1=new InetSocketAddress("192.168.0.101",80); InetSocketAddress inetSocketAddress2=new InetSocketAddress("192.168.0.101",80); System.out.println(inetSocketAddress1.getHostName()); System.out.println(inetSocketAddress2.getHostString()); } }
测试结果: