Java中的网络支持

通过java实现网络编程,说到底还是涉及到类

提供网络功能的四大类

1.InetAddress:封装IP地址及DNS域解析符,没有封装端口

InetAddress没有对外公共的构造方法,得到InetAddress对象的三种常用方法


//使用getLocalHost()创建新对象
InetAddress addr=InetAddress.getLocalHost();
//10.183.52.45
System.out.println(addr.getHostAddress());
//计算机名称
System.out.println(addr.getHostName());

		
//根据域名得到对象
InetAddress addr2=InetAddress.getByName("www.163.com");
//163服务器的IP 183.95.189.36
System.out.println(addr2.getHostAddress());
// www.163.com
System.out.println(addr2.getHostName());
		
		
//根据IP地址得到对象
InetAddress addr3=InetAddress.getByName("183.95.189.36");
// 183.95.189.36
System.out.println(addr3.getHostAddress());
// 如果DNS没有解析,还是返回IP地址
System.out.println(addr3.getHostName());





InetScoketAddress:在InetAddress基础上加入端口的概念




2.URL

由4部分组成,协议+存放资源的主机域名+端口号+资源名


创建对象的常用方法

//绝对路径构建
URL url=new URL("http://www.baidu.com:80/index.html#aa?uname=www");

//相对路径构建
url=new URL("http://www.baidu.com:80/a/");
url=new URL(url,"b");
System.out.println(url.toString());//http://www.baidu.com:80/a/b


URL url=new URL("http://www.baidu.com:80/index.html#aa?uname=www");
System.out.println("协议:"+url.getProtocol());
System.out.println("域名:"+url.getHost());
System.out.println("端口:"+url.getPort());
System.out.println("资源:"+url.getFile());
System.out.println("相对路径资源:"+url.getPath());
System.out.println("锚点:"+url.getRef());
//若存在锚点返回null,不存在则返回正确
System.out.println("参数:"+url.getQuery());
//获取输入流-网络流
InputStream is=url.openStream();



协议:http
域名:www.baidu.com
端口:80
资源:/index.html
相对路径资源:/index.html
锚点:aa?uname=www
参数:null



3.TCP协议:Socket ServerSocket

4.UDP协议:DatagramSocket DatagramPacket 

            



代码示例:


/**
 * 服务端
 */
public class UDPService {
	public static void main(String[] args) throws IOException {
		System.out.println("----服务端启动 等待客户端连接----");
		//1)创建DataGramSocket类+指定端口
		DatagramSocket server=new DatagramSocket(8888);
		
		//2)准备接受容器,封装DatagramPacket 
		byte[] container=new byte[1024];
		DatagramPacket packet=new DatagramPacket(container,container.length);
		
		//3)接受数据
		server.receive(packet);
		
		//4)分析数据
		byte[] data=packet.getData();
		int len=packet.getLength();
		System.out.println("客户端说:"+new String(data,0,len));
		
		//服务器回复客户端
		byte[] sendMsg="服务器说:okay!".getBytes();
		DatagramPacket packet2=new DatagramPacket(sendMsg,sendMsg.length,
			new InetSocketAddress("localhost",6666));
		server.send(packet2);
		
		//5)释放资源
		server.close();
	}
}


/**
 *客户端
 */
public class UDPMyClient {
	public static void main(String[] args) throws IOException {
		//1)创建DataGramSocket类+指定端口
		DatagramSocket client=new DatagramSocket(6666);
		
		//2)准备数据
		String msg="hello !";
		byte[] data=msg.getBytes();
		
		//3)打包成DatagramPacket +服务器地址+端口
		DatagramPacket packet=new DatagramPacket(data,data.length,
			new InetSocketAddress("localhost",8888));
		
		//4)发送
		client.send(packet);
		
		//接受服务器的回复
		byte[] container=new byte[1024];
		DatagramPacket packet2=new DatagramPacket(container,container.length);
		client.receive(packet2);
		byte[] data2=packet2.getData();
		int len=packet2.getLength();
		System.out.println(new String(data2,0,len));
		
		//5)释放资源
		client.close();
	}
}



输出结果


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值