计算机IP获取
- InetAddress.getByName(host) 获取IP/计算机名称为host的InetAddress对象
- getHostName() 获取该InetAddress对象的IP地址
- getHostAddress() 获取该InetAddress对象的计算机名称 ```java import java.net.InetAddress; import java.net.UnknownHostException;
public class MyThreadDemo { public static void main(String[] args) throws InterruptedException, UnknownHostException { InetAddress in = InetAddress.getByName(“10.30.67.19”); System.out.println(“计算机名称”+in.getHostName()); System.out.println(“计算机IP”+in.getHostAddress()); } }
<a name="ncuaW"></a>## UDP- 无连接:仅仅知道接收一方的IP地址和和端口号就可以进行发送- 不可靠:没有确认的机制,没有重传的机制- 面向数据报:不能够灵活的控制读写数据的次数和数量,应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并,倘若我们需要传输的数据超过64K,我们就需要在应用层手动的分包,多次发送,并且在接收端手动的拼装;- 有接收缓冲区,没有发送缓冲区:这个接收缓冲区不能保证接收到的UDP的数据报的顺序和发送UDP数据报的顺序是一样的,当缓冲区满的时候,再接收到的数据就会被直接丢弃<a name="iydmW"></a>### UDP发送端- 创建发送端对象- 创建数据,并把数据打包- 发送数据包- 关闭发送端```javapublic class MyThreadDemo {public static void main(String[] args) throws IOException {//创建DatagramSocket发送端对象DatagramSocket ds = new DatagramSocket();//创建数据报包,并指定数据长度,地址IP和端口byte [] data = "Hello Java".getBytes();DatagramPacket dp = new DatagramPacket(data,data.length,InetAddress.getByName("10.30.67.10"),1000);//发送数据报包ds.send(dp);//关闭ds.close();}}
UDP接收端
- 创建接收端对象
- 创建数据包接收数据
- 接收数据
- 解析数据包并显示出来
- 关闭接收端 ```java import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket;
public class MyThread { public static void main(String[] args) throws IOException { //创建接收端Socket对象,并指定端口 DatagramSocket ds = new DatagramSocket(1000); //创建数据包用来接收数据 byte [] data = new byte[1024]; DatagramPacket dp = new DatagramPacket(data,data.length); //调用对象接收数据 ds.receive(dp); //解析数据包,并显示 byte[] getdata = dp.getData(); //使用dp.getLength获取数据包长度 String stringdata = new String(getdata,0,dp.getLength()); System.out.println(stringdata); //关闭接收端 ds.close(); }
}
<a name="wDqCo"></a>## TCP<a name="k1kkY"></a>### TCP客户端```javapublic class MyThread {public static void main(String[] args) throws IOException {//创建Socket对象Socket sock = new Socket("10.30.67.10",80);//获取输入流OutputStream getout = sock.getOutputStream();//将数据写入输入流并发送getout.write("TCP测试程序".getBytes());getout.close();}}
TCP服务端
public class MyThreadDemo {public static void main(String[] args) throws IOException {//创建serversocket对象ServerSocket ss = new ServerSocket(80);//监听该端口Socket s = ss.accept();//获取该端口内容InputStream is = s.getInputStream();byte [] data = new byte[1024];int i = is.read(data);String d = new String(data,0,i);System.out.println(d);ss.close();}}
