java整理学习笔记16

网络编程:

IP:定位网络上的节点,电脑,手机,服务器,路由器…(电子设备)
网络中的IP重要分为2大类: IPV4 32 IPV6 128
特殊的ip:
192.168.0.0~192.168.255.255 非注册IP,供组织内部使用
127.0.0.1 本地IP
localhost: 本地域名
ip与域名 DNS服务器
java中如何表示IP:
InetAddress 这个类代表一个互联网协议(IP)地址。
端口:区分软件
url:定位资源 统一资源定位符
协议: 协议就是交流方式, 更畅通,更标准,更规范
传输协议: 传输数据满足传输协议
tcp:相当于打电话 ***
udp:相当于写信

InetAddress in1=InetAddress.getLocalHost();//返回本机的地址
System.out.println(in1); 
InetAddress in2=InetAddress.getByName("www.baidu.com");  //参数可以是IP和域名
System.out.println(in2);
System.out.println(in1.getHostAddress());//返回的IP地址字符串的文本表示。  
System.out.println(in1.getHostName());  //这个IP地址的主机名。 

端口:区分软件

统一协议下端口不能冲突 tcp udp
0~65535 2个字节 表示端口
建议使用8000以上的端口号自定义

预留端口号:

  • 80: http
    *8080: tomcat

  • 1521: oracle

  • 3306: mysql

  • 在java中表示端口: InetSocketAddress IP地址+端口号

/*
		 * InetSocketAddress(InetAddress addr, int port)创建一个套接字地址的IP地址和端口号。  
		 * InetSocketAddress(String hostname, int port) 创建一个套接字地址的主机名和端口号。  
		 */
		InetSocketAddress net1=new InetSocketAddress("localhost",8888);
		InetSocketAddress net2=new InetSocketAddress( InetAddress.getLocalHost(),8888);
		System.out.println(net1);
		System.out.println(net2);
		/*
		 * getPort() 的端口号。
		 * String getHostName()  ip
		 */
		System.out.println(net1.getPort()); //8888
		System.out.println(net1.getHostName()); //localhost
		System.out.println(net1.getAddress()); //localhost/127.0.0.1

URL: 统一资源定位符

  • 互联网的三大基石: url html http
  • 协议: http
  • 域名:www.baidu.com
  • 端口:80
  • 资源:index.html
  • 数据:uname=zhangsan&pwd=123
  • 锚点:#a
  • “http://www.baidu.com:80/index.html?uname=zhangsan&pwd=123#a”
  • java中表示url:
  • URL
URL url=new URL("http://www.baidu.com:80/index.html?uname=zhangsan&pwd=123#a");
	System.out.println("协议:"+url.getProtocol());
	System.out.println("域名:"+url.getHost());
	System.out.println("端口:"+url.getPort());
	System.out.println("文件:"+url.getFile());
	System.out.println("数据资源:"+url.getQuery());
	System.out.println("锚点:"+url.getRef());

面向Socket套接字编程:

  • socket就是传输层为引用层开辟的小口子

  • tcp和udp对socket的实现不同

  • udp: 发信息,非面向连接 不安全 协议简单,开销小,效率高 大小有限制,一般不超过60k

  • tcp: 打电话,面向连接 安全,效率低 基于3次握手: 1.拨号 2.响应,连接上 3.发送数据

  • udp: 基于字节数组

  • DatagramSocket

  • DatagramPacket

  • udp实现基本流程: 发送端

  • 1.定义发送端

  • DatagramSocket(int port) 构造一个数据报套接字绑定到本地主机上的指定端口。

  • 2.准备数据

  • 3.给数据打包

  • DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造一个数据报包发送数据包的长度 length指定主机上的指定端口号。

  • 4.发送

  • 5.关闭

public static void main(String[] args) throws IOException {
		System.out.println("------------------发送端-------------------");
		//1.定义发送端
		DatagramSocket client= new DatagramSocket(8888);
		//2.数据
		byte[] str="因为哈哈".getBytes();
		//3.打包
		DatagramPacket packet=new DatagramPacket(str,str.length,new InetSocketAddress("localhost", 9999));
		//4.发送
		client.send(packet);
		//5.关闭
		client.close();
	}

udp实现基本流程: 接收端

  • 1.定义接收端
  • 2.准备盒子接收数据
  • DatagramPacket(byte[] buf, int length) 构造一个 DatagramPacket length接收数据包的长度。
  • 3.接收 receive(packet)
  • 4.关闭
public static void main(String[] args) throws IOException {
		System.out.println("------------------接收端-------------------");
		//1.定义接收端
		DatagramSocket server= new DatagramSocket(9999);
		//2.准备一个字节数组,打包
		byte[] car=new byte[1024];
		DatagramPacket packet=new DatagramPacket(car,car.length);
		//3.接收
		server.receive(packet);
		//处理数据
		/*
		byte[] getData() 
		返回数据缓冲区。  
		int getLength() 
		返回数据的长度发送或接收到的数据的长度。  
		 */
		byte[] datas=packet.getData();
		int length=packet.getLength();
		System.out.println(new String(datas,0,length));
		//5.关闭
		server.close();

tcp实现基本流程: 客户端

  • 1.定义客户端 Socket Socket(String host, int port) 创建一个流套接字连接到指定主机上的指定端口号。
  • 2.准备数据
  • 3.写出 IO操作
  • 4.关闭
public static void main(String[] args) throws UnknownHostException, IOException {
		System.out.println("-------------Client-----------");
		//1.定义客户端 Socket  Socket(String host, int port)
		Socket client=new Socket("127.0.0.1",7777);
		//2.准备数据
		String str="name=zhangsan&pwd=123";
		//3.写出  IO操作 
		DataOutputStream data=new DataOutputStream(client.getOutputStream());
		data.writeUTF(str);
		
		data.flush();
		//4.关闭
		data.close();
		client.close();
	}

tcp实现基本流程: 服务端

  • 1.定义服务端 ServerSocket ServerSocket(int port) 创建一个服务器套接字绑定到指定端口。
  • 2.阻塞式监听 Socket accept() 监听连接套接字并接受它。
  • 3.io操作
  • 4.关闭
public static void main(String[] args) throws IOException {
		System.out.println("-------------Server-----------");
		//1.定义服务端
		ServerSocket server=new ServerSocket(7777);
		//2.阻塞式监听  Socket accept() 
		Socket client=server.accept();
		//3.io操作
		DataInputStream in=new DataInputStream( client.getInputStream());
		String str=in.readUTF();
		System.out.println(str);
		//4.关闭
		in.close();
		client.close();
		server.close();
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值