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();
}
}
}