通过静态方法获得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(); } } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)