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:程序资源的标识
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协议数据发送接收的基本步骤
注意:要先启动服务器端(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流等。