import java.net.Inet4Address; import java.net.Inet6Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Enumeration; public class InetAddressExample { public static void main(String[] args){ try{ //包含了主机每个接口所对应的NetworkInterface类实例 Enumeration<NetworkInterface> interfaceList=NetworkInterface.getNetworkInterfaces(); if(interfaceList==null){ System.out.println("--No interfaces found--"); } else{ //打印接口的地址 while(interfaceList.hasMoreElements()){ NetworkInterface iface=interfaceList.nextElement(); System.out.println("Interface "+iface.getName()+":");//打印接口名 Enumeration<InetAddress> addrList=iface.getInetAddresses();//获取与接口想关联的地址 if(!addrList.hasMoreElements()){ System.out.println("(No addresses for this interface)"); } while(addrList.hasMoreElements()){ InetAddress address=addrList.nextElement(); System.out.print("Address " +((address instanceof Inet4Address?"(v4)":(address instanceof Inet6Address ?"(v6)":"(?)")))); System.out.println(": "+address.getHostAddress()); } } } }catch(SocketException se){ System.out.println("Error getting network interfaces:"+se.getMessage()); } for(String host:args){ try{ System.out.println(host+":"); InetAddress[] addressList=InetAddress.getAllByName(host);//获取给定主机名/地址的相关地址列表 for(InetAddress address:addressList){ System.out.println("\t"+address.getHostName()+"/"+address.getHostAddress()); } }catch(UnknownHostException e){ System.out.println("\tUnable to find address for"+host); } } } }
TCP套接字:
TCP客户端:
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.SocketException; public class TCPEchoClient { public static void main(String[] args) throws IOException{ if((args.length<2)||(args.length>3)) throw new IllegalArgumentException("Parameter(s): <Server><Word>[<Port>]"); String server=args[0];//服务端名或者IP地址 byte[] data=args[1].getBytes(); int servPort=(args.length==3)?Integer.parseInt(args[2]):7; Socket socket=new Socket(server,servPort);//通过特定的端口连接服务器 System.out.println("Connected to server...sending echo string"); InputStream in=socket.getInputStream(); OutputStream out=socket.getOutputStream(); out.write(data);//发送信息 int totalBytesRcvd=0;//已接收的信息数 int bytesRcvd;//上次接收的信息数 for(;totalBytesRcvd<data.length;){ if((bytesRcvd=in.read(data,totalBytesRcvd,data.length-totalBytesRcvd))==-1) throw new SocketException("Connection closed prematurely"); totalBytesRcvd+=bytesRcvd; } System.out.println("Received: "+new String(data)); socket.close(); } }
TCP服务端:
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketAddress; public class TCPEchoServer { private static final int BUFSIZE=32; public static void main(String[] args) throws IOException{ if(args.length!=1) throw new IllegalArgumentException("Parameter(s) <Port>"); System.out.println("host:"+InetAddress.getLocalHost()); int servPort=Integer.parseInt(args[0]); ServerSocket servSock=new ServerSocket(servPort); int recvMsgSize; byte[] receiveBuf=new byte[BUFSIZE]; for(;true;){ Socket clntSock=servSock.accept(); SocketAddress clientAddress=clntSock.getRemoteSocketAddress(); System.out.println("Handling client at "+clientAddress); InputStream in=clntSock.getInputStream(); OutputStream out=clntSock.getOutputStream(); for(;(recvMsgSize=in.read(receiveBuf))!=-1;){ out.write(receiveBuf,0,recvMsgSize); } clntSock.close(); } } }