学习网络编程看这篇就够了

好文推荐:排序、查找算法齐全(程序员必会 好文 值得收藏!)

1、网络编程_ip

IP:定位一个节点,如计算机、路由、通讯设备等

  • InetAddress:多个静态方法
  • 1、getLocalHost:本机
  • 2、getByName:根据域名DNS|IP地址---->IP

两个成员方法:

  • 1、getHostAddress:范湖地址
  • 2、getHostName:返回计算机名
public class Test1 {
	public static void main(String[] args) throws UnknownHostException {
		//使用getLocalHost方法创建InetAddress对象
		InetAddress addr=InetAddress.getLocalHost();
		System.out.println(addr.getHostAddress());;
		System.out.println(addr.getHostName());  //输出计算机名
		
		//根据域名得到InetAddress对象
		addr=InetAddress.getByName("www.baidu.com");
		System.out.println(addr.getHostAddress());  //返回baidu服务器的ip
		System.out.println(addr.getHostName());  //输出:www.baidu.com
		
		//根据ip得到InetAddress对象
		addr=InetAddress.getByName("183.232.231.172");
		System.out.println(addr.getHostAddress());
		System.out.println(addr.getHostName());  //输出ip而不是域名
	}
	
}

2、网络编程_端口

端口:

  • 1、区分软件
  • 2、2个字节0-65535 UDP TCP
  • 3、同一个协议端口不能冲突
  • 4、定义端口越大越好

InetSocketAddress:

  • 1、构造器:new InetSocketAddress(地址|域名,端口)
  • 2、方法:getAddress()、getPort()
public class Test2 {
	public static void main(String[] args) {
		//包含端口
		InetSocketAddress socketAddress=new InetSocketAddress("192.168.0.101",8080);
		InetSocketAddress socketAddress2=new InetSocketAddress("localhost",9000);
		System.out.println(socketAddress.getHostName());
		System.out.println(socketAddress.getAddress());
		System.out.println(socketAddress2.getAddress());
		System.out.println(socketAddress2.getPort());
	}
}

3、网络编程_URL_基本用法

URL:统一资源定位器,互联网三大基石之一(http、html):区分资源

  • 1、协议
  • 2、域名或计算机
  • 3、端口:默认80
  • 4、请求资源
public class Test3 {
	public static void main(String[] args) throws MalformedURLException {
		URL url=new URL("http://www.biadu.com:80/index.html?uname=shsxt&age=18#a");
		//获取四个值
		System.out.println("协议:"+url.getProtocol());
		System.out.println("域名ip:"+url.getHost());
		System.out.println("端口:"+url.getPort());
		System.out.println("请求资源:"+url.getFile());
		System.out.println("请求资源:"+url.getPath());
		//参数
		System.out.println("参数:"+url.getQuery());
		//锚点
		System.out.println("锚点:"+url.getRef());
		
	}
}

4、网络编程_爬虫原理

/*
 * 网络爬虫的原理
 * 
 */
public class Test4 {
	public static void main(String[] args) throws Exception {
		//获取URL
		URL url=new URL("https://www.jd.com");
//		URL url=new URL("https://wwww.dianping.com");
		//下载资源
		InputStream is=url.openStream();
		BufferedReader br=new BufferedReader(new InputStreamReader(is,"UTF-8"));
		String msg=null;
		while(null!=(msg=br.readLine())) {
			System.out.println(msg);
		}
		br.close();
		
		//分析
		//处理。。。
		
	}
}

说明:代码有些问题,没得到正确的输出,还有异常。哪位大佬知道原因的请在评论区留言!

/*
 * 网络爬虫原理+模拟浏览器
 */
public class Test5 {
	public static void main(String[] args) throws Exception {
		//获取URL
			//URL url=new URL("https://www.jd.com");
			URL url=new URL("https://wwww.dianping.com");
			//下载资源
			HttpURLConnection conn=(HttpURLConnection) url.openConnection();
			conn.setRequestMethod("GET");
			conn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36");
			InputStream is=url.openStream();
			BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
			String msg=null;
			while(null!=(msg=br.readLine())) {
				System.out.println(msg);
			}
			br.close();
			
			//分析
			//处理。。。
	}
}

5、网络编程_UDP_基本步骤

UDP:基本步骤
发送端udpClient

  • 1、使用DatagramSocket 指定端口 创建发送端
  • 2、准备数据 一定转成字节数组
  • 3、封装成DatagramPacket包裹 ,需要指定目的地
  • 4、发送包裹send(DatagramPacket p)
  • 5、释放资源
public class Test7UdpServe {
	public static void main(String[] args) throws IOException {
		System.out.println("发送发启动中");
		//1、使用DatagramSocket 指定端口 创建发送端
		DatagramSocket client=new DatagramSocket(8889);
		//2、准备数据 一定转成字节数组
		String data="学习Java";
		byte[] datas=data.getBytes();
		 //3、封装成DatagramPacket包裹 ,需要指定目的地
		DatagramPacket packet=new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",6666));
		//4、发送包裹s
		client.send(packet);
		//5、释放资源
		client.close();
	}
}

UDP:基本步骤
接收端 UdpServe

  • Address already in use: bind 同一个协议下端口不允许冲突
  • 1、使用DatagramSocket 指定端口 创建接收端
  • 2、准备容器 封装成DatagramPacket 包裹
  • 3、阻塞式接收包裹 receive(DatagramPacket p)
  • 4、分析数据
    *byte[] getData()
  •   getLength()
    
  • 5、释放资源
public class Test6 {
	public static void main(String[] args) throws IOException {
		System.out.println("接收方启动中");
		//1、使用DatagramSocket 指定端口 创建接收端
		DatagramSocket server=new DatagramSocket(6666);
		//2、准备容器 封装成DatagramPacket 包裹
		byte[] container=new byte[1024*60];
		DatagramPacket packet=new DatagramPacket(container,0,container.length);
		//3、阻塞式接收包裹 receive(DatagramPacket p)
		server.receive(packet);
		//4、分析数据  
		byte[] datas=packet.getData();
		int len=packet.getLength();
		System.out.println(new String(datas,0,len));
		//5、释放资源
		server.close();
	}
	
}

注意:先启动发送方,后启动接收方。

6、网络编程_TCP_基本步骤

熟悉流程
创建服务器

  • 1、指定端口 使用ServerSocket创建服务器
  • 2、阻塞式等待链接 accept
  • 3、操作:输入输出流
  • 4、释放资源
public class Server {
	public static void main(String[] args) throws Exception {
		System.out.println("-----Server-----");
		//1、指定端口 使用ServerSocket创建服务器
		ServerSocket server=new ServerSocket(8989); 
		// 2、阻塞式等待链接 accept
		Socket client =server.accept();
		System.out.println("一个客户端建立了链接");
		//3、操作:输入输出流
		DataInputStream dis=new DataInputStream(client.getInputStream());
		String data=dis.readUTF();
		System.out.println(data);
		//4、释放资源
		dis.close();
		client.close();
		server.close();
	}
}

熟悉流程
创建客户端

  • 1、建立链接 :使用Socket创建客户端+服务的地址和端口
  • 2、操作:输入输出流
  • 3、释放资源
public class Client {
	public static void main(String[] args) throws UnknownHostException, IOException {
		System.out.println("-------Client");
		 //1、建立链接 :使用Socket创建客户端+服务的地址和端口
		Socket client=new Socket("localhost",8989);
		//2、操作:输入输出流
		DataOutputStream dos=new DataOutputStream(client.getOutputStream()); 
		String data="hello";
		dos.writeUTF(data);
		dos.flush();
		//3、释放资源
		dos.close();
		client.close();
	}
}

上篇博文:学习Java多线程看这篇就够了(好文 值得分享!)

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值