通过静态方法获得InetAddress实例:
getByName(String host):根据主机名称获得对应的InetAddress对象。
getByAddress(byte[] addr):根据原始IP地址获得对应对象。
getLocalHost():得到本地的InetAddress对象
通过实例的方法获得对应的IP地址,及主机名称
String getHostName():得到此IP地址的主机名
String getCanonicalHostName():得到此IP地址的全限定域名。
String getHostAddress():得到这个对象对应的IP地址的字符串。
public static void main(String[] args) {
try {
InetAddress ip = InetAddress.getLocalHost();
System.out.println("得到次ip地址的主机名" + ip.getHostName());
System.out.println("得到次ip地址字符串" + ip.getHostAddress());
System.out.println("得到次ip地址全限定域名" + ip.getCanonicalHostName());
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
2.URL
2.1说明:
URL(Uniform Resource Locator)对象代表统一资源定位器,它是指互联网“资源”的指针。资源可以是简单的文件或目录,也可以his对更复杂对象的引用,比如对数据库或搜索引擎的查询。
URL可由 协议名,主机,端口和资源组成
protocol://host:port/resoureName
URL类提供了多个构造器用于创建URL对象,通过实例对象访问URL对应的资源
String getFile():获取该URL的资源名。
String getHost():获取该URL的主机名。
String getPath():获得该URL的路径部分。
int getPort():获得该URL的端口号。
String getProtocol():获得该URL的协议名称。
String getQuery():获得该URL查询字符串部分。
如何将URL和IO流连接起来:
URLConnection openConnection():返回一个URLConnection对象,它代表了与URL所引用的远程对象的连接。
InputStream getInputStream:通过这个连接得到一个输入流。
InputStream openStream():打开与此URL的连接,并返回一个用于读取该URL资源的InputStream。
public static void main(String[] args) {
try {
//1.创建一个URL实例
URL url =new URL("http://www.baidu.com");
//2.建立一个与URL所引用的远程对象的连接
URLConnection urlConn=url.openConnection();
//3.通过连接得到一个IO流
InputStream is = urlConn.getInputStream();
//4.缓冲流
BufferedReader br=new BufferedReader
(new InputStreamReader(is));
String s;
while ((s=br.readLine())!=null) {
System.out.println(s);
}
br.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
3.Socket编程
3.1TCP/IP协议
使用TCP/IP协议开发的应用程序,一般会分为服务器端和客户端两部分。
3.2使用ServerSocket进行服务端开发服务器端的主要功能是侦听服务器的某一端口,接受客户端的请求,与客户端进行数据交换(接收客户端数据并向客户端发送数据)。
Java使用ServerSocket类实现端口侦听,ServerSocket实例的accept方法用来等待并接受客户端的请求,该方法在运行时会阻塞当前程序直到连接建立为止,一旦连接建立成功,accept方法会返回一个Socket类的实例,通过该实例的getInputStream和getOutputStream方法接收或向客户端发送数据。最后调用ServerSocket实例或Socket实例的close方法关闭连接。
public static void main(String[] args) {
//1.ServerSocket类用来实现端口的监听,其实例有accept()方法,等待并接收客户端的请求,
//接收到请求,返回一个Socket实例,若无接收则一直阻塞程序
ServerSocket serverSocket=null;
//2.Socket实例的getInputStream方法和getOutStream方法得到接收和输出的流
Socket socket = null;
BufferedReader br = null;
try {
serverSocket=new ServerSocket(3333);
System.out.println("服务器正在等待客户端连接。。。。。");
//若无连接,阻塞
socket=serverSocket.accept();
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("服务器已经接收到了客户端请求");
String s=null;
while ((s = br.readLine())!=null) {
System.out.println(s);;
}
} catch (IOException e) {
e.printStackTrace();
}finally {
while (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
while (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}while (socket != null); {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
3.3使用Socket进行客户端开发
客户端代码不需要使用ServerSocket类,也不需要使用Socket看的accept方法获取Socket实例,而是通过传入服务器的IP地址和端口两个参数来实例化Socket
public static void main(String[] args) {
Socket socket = null;
BufferedWriter bw = null;
try {
//得到本地IP
InetAddress ip = InetAddress.getLocalHost();
//1.建立Socket实例,传IP地址及端口
socket = new Socket(ip.getHostAddress(), 3333);
//2.建立缓存输出流
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//3.写入输入
bw.write("明年今日");
//换行
bw.newline();
bw.write("今年明日");
bw.newline();
bw.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}



