Java笔记第十弹
网络编程三要素
1、IP地址--设备的标识
2、端口--应用程序的标识
3、协议--常见的协议有UDP协议和TCP协议
IP地址
1、IPv4(二进制数据)
2、IPv6
常用命令:
ipconfig:查看本机IP地址
ping IP地址:检查网络是否连通
特殊的IP地址:
127.0.0.1:是回送地址,可以代表本机地址,一般用来测试使用
InetAddress的使用(类)
//表示InetAddress协议的地址
//方法
static InetAddress getByName(String host);//确定主机名称的IP地址,主机名称可以是机器名称,也可以是IP地址
String getHostName();//获取此IP地址的主机名
String getHostAddress();//返回文本显示中的IP地址字符串
相关应用:
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Main{
public static void main(String[] args) throws UnknownHostException {
InetAddress ia=InetAddress.getByName("刘紫锦");//可以是主机名,也可以是IP地址
String name=ia.getHostName();
String ip=ia.getHostAddress();
System.out.println("主机名:"+name);
System.out.println("Ip地址:"+ip);
}
}
端口(设备上应用程序的唯一标识)
协议
1、UDP协议
消耗小,通信效率高,通常都会用于音频、视频和普通数据的传输
2、TCP协议
三次握手--保证连接的可靠性
可以保证传输数据的安全性和可靠性
UDP通信程序
UDP发送数据
//步骤:
//创建发送端的Socket对象(DatagramSocket)
//创建数据,并把数据打包
//调用DatagramSocket象的方法发送数据
//关闭发送端
相关应用:
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.net.DatagramSocket;
public class Main{
public static void main(String[] args) throws UnknownHostException, SocketException {
//创建对象
DatagramSocket ds=new DatagramSocket();
//创建数据,并把数据打包
//构造一个数据包
byte[] by="hello,udp,我来啦!".getBytes();
int length=by.length;
InetAddress ia=InetAddress.getByName("liuzijin");
int port=10086;//端口号
DatagramSocket dp=new DatagramSocket(by,by.length,InetAddress.getByName("liuzijin"),10086);
//发送数据
ds.send(dp);
//关闭发送端
ds.close();
}
}
UDP接收数据
import java.net.UnknownHostException;
import java.net.DatagramSocket;
import java.net.SocketException;
public class Main{
public static void main(String[] args) throws UnknownHostException, SocketException {
//创建接收对象
DatagramSocket ds=new DatagramSocket(10086);
byte[] by=new byte[1024];
DatagramSocket dp=new DatagramSocket(by,by.length);
ds.receive(dp);
//返回数据缓冲区
byte[] bb=dp.getData();
String dataString=new String(bb,0,bb.getLength());
System.out.println("数据是:"+dataString);
ds.close();
}
}
案例:
//send.java
import java.io.*;
import java.net.InetAddress;
import java.net.DatagramSocket;
public class Main{
public static void main(String[] args) throws IOException {
DatagramSocket ds=new DatagramSocket();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line;
while((line=br.readLine())!=null){
if("886".equals(line)){
break;
}else{
byte[] by=line.getBytes();
DatagramSocket dp=new DatagramSocket(by,by.length,InetAddress.getByName("liuzijin"),12345);
ds.send(dp);
ds.close();
}
}
}
}
//receive.java
import java.io.*;
import java.net.DatagramSocket;
public class Main{
public static void main(String[] args) throws IOException {
DatagramSocket ds=new DatagramSocket(12345);
while(true) {
byte[] by = new byte[1024];
DatagramSocket dp = new DatagramSocket(by, by.length);
ds.receive(dp);
System.out.println("数据是:" + new String(dp.getData(), 0, dp.getLength()));
}
}
}