现在的位置: 首页 > 综合 > 正文

JAVA 基本套接字

2018年01月14日 ⁄ 综合 ⁄ 共 3330字 ⁄ 字号 评论关闭
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();
		}
	}
}

【上篇】
【下篇】

抱歉!评论已关闭.