1、IP地址相关


ip:主机的标识

package com.net.java;

import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * 类InetAdress封装了java关于IP的相关内容
 * 此类表示Internet协议(IP)地址。
 * @author majinbuu
 *
 */
public class IP_test { 
	public static void main(String[] args) throws UnknownHostException {
		//返回主机地址
		//1、根据getLocalHost创建InetAddress对象,由于getLocalHost方法是static修饰的,可不用new创建对象直接调用
		// public static InetAddress getLocalHost() throws UnknownHostException 
		InetAddress ip=InetAddress.getLocalHost();
		System.out.println("本机ip地址为:"+ip.getHostAddress()); //本机ip地址为:192.168.0.103
		System.out.println("本机名字为:"+ip.getHostName());  //本机名字为:WIN-BO27P1H3V5P
		
		//2、根据域名创建InetAddress对象,getByName是静态方法
		//public static InetAddress getByName
		//该方法通过DNS去解析ip地址
		ip=InetAddress.getByName("www.4399.com");
		System.out.println("网站地址为:"+ip.getHostAddress()); //网站地址为:122.72.101.184
		System.out.println("网站名为:"+ip.getHostName());  //网站名为:www.4399.com
		
		//3、根据ip创建InetAddress对象,也使用getByName方法
		ip=InetAddress.getByName("122.72.101.184");
		System.out.println("名为:"+ip.getHostName()); //名为:122.72.101.184
	}
}

**

2、端口相关

**
端口 :电脑中软件程序的标识,用于区分软件。
用一个十六位的二进制数表示,它代表了0-65535个接口,实际电脑中不可能有这么多应用程序,所以一般自己编程使用的端口尽量在8000以上。
不用的协议(UDP/TCP)之间的端口可以冲突,同一协议的端口不能冲突。

package com.net.java;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
/**
 * 该类实现IP套接字地址(IP地址+端口号)它也可以是一对(主机名+端口号),在这种情况下将尝试解析主机名
 * @author majinbuuu
 *InetSocketAddress的继承关系为:public class InetSocketAddress extends SocketAddress
 *其父类为:SocketAddress
 */
public class Inetsocket {
	public static void main(String[] args) {
		InetSocketAddress isa=new InetSocketAddress("localhost",10200);//localhost为本机,在c盘中的某个配置文件中可以查到
		System.out.println(isa.getHostName()); //localhost
		System.out.println(isa.getAddress());  //localhost/127.0.0.1
		System.out.println(isa.getPort());   //10200
	}
}

3、url

url:程序资源的标识

java项目增加lib java项目增加IP地址_java项目增加lib

package com.net.java;

import java.net.MalformedURLException;
import java.net.URL;

public class Urltest {
	public static void main(String[] args) throws MalformedURLException {
		URL url=new URL("https://www.zhihu.com/question/412379950/answer/1395084574");
		System.out.println("协议为:"+url.getProtocol()); //协议为:https
		System.out.println("域名:"+url.getHost()); //域名:www.zhihu.com
		System.out.println("请求资源1(完整内容):"+url.getFile()); //请求资源1(完整内容):/question/412379950/answer/1395084574
		System.out.println("端口号:"+url.getPort()); //端口号:-1 。-1表示服务器此端口无法访问
		System.out.println("请求资源2:"+url.getPath()); //请求资源2:/question/412379950/answer/1395084574
	}
}

4、UDP协议数据发送接收的基本步骤

java项目增加lib java项目增加IP地址_System_02


注意:要先启动服务器端(server),再启动客户端(client)。此外,数据都要转换为字节数组。

如果先启动客户端,数据还不知道往哪去,造成丢失。

(1)数据发送端:

package com.net.java;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

/**
 * 使用UDP协议的传输的基本步骤
 * DatagramSocket:此类表示用于发送和接收数据报数据包的套接字。 
 * DatagramPacket:该类表示数据报包。
 * @author majinbuu
 *
 */
public class UDPclient {
	public static void main(String[] args) throws IOException {
		System.out.println("发送端启动......");
		//1、 创建socket接口,并指定输出端口
		DatagramSocket ds=new DatagramSocket(8888);
		//2、数据转成字节数组
		String st="majinbuu";
		byte[] bs=st.getBytes();
		//3、数据打包,指定目的端口
		DatagramPacket dp=new DatagramPacket(bs,0,bs.length,new InetSocketAddress("localhost",9999));
		//4、发送
		ds.send(dp);
		//5、释放资源
		ds.close();
	}
}

(2)数据接收端:

package com.net.java;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UDPServer {
	public static void main(String[] args) throws IOException {
		System.out.println("接收端启动......");
		//1、创建服务器socket对象,创建接收端
		DatagramSocket soc=new DatagramSocket(9999); //目的地的端口号与发送时的要一致,否则数据丢失
		//2、接收准备
		byte[] data1=new byte[20*1024];
		DatagramPacket data2=new DatagramPacket(data1,0,data1.length);
		//3、阻塞式的接收数据
		soc.receive(data2);
		//4、分析数据
		byte[] org=data2.getData();
		String fin=new String(org);
		System.out.println(fin);
		//5、关闭
		soc.close();
	}
}

上面的例子传递的是String对象

 1、java基本数据类型:使用DataOutputStream流等。
2、引用类型如类对象等:使用ObjectOutputStream流等。