计算机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()); } }

  1. <a name="ncuaW"></a>
  2. ## UDP
  3. - 无连接:仅仅知道接收一方的IP地址和和端口号就可以进行发送
  4. - 不可靠:没有确认的机制,没有重传的机制
  5. - 面向数据报:不能够灵活的控制读写数据的次数和数量,应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并,倘若我们需要传输的数据超过64K,我们就需要在应用层手动的分包,多次发送,并且在接收端手动的拼装;
  6. - 有接收缓冲区,没有发送缓冲区:这个接收缓冲区不能保证接收到的UDP的数据报的顺序和发送UDP数据报的顺序是一样的,当缓冲区满的时候,再接收到的数据就会被直接丢弃
  7. <a name="iydmW"></a>
  8. ### UDP发送端
  9. - 创建发送端对象
  10. - 创建数据,并把数据打包
  11. - 发送数据包
  12. - 关闭发送端
  13. ```java
  14. public class MyThreadDemo {
  15. public static void main(String[] args) throws IOException {
  16. //创建DatagramSocket发送端对象
  17. DatagramSocket ds = new DatagramSocket();
  18. //创建数据报包,并指定数据长度,地址IP和端口
  19. byte [] data = "Hello Java".getBytes();
  20. DatagramPacket dp = new DatagramPacket(data,data.length,InetAddress.getByName("10.30.67.10"),1000);
  21. //发送数据报包
  22. ds.send(dp);
  23. //关闭
  24. ds.close();
  25. }
  26. }

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(); }

}

  1. <a name="wDqCo"></a>
  2. ## TCP
  3. <a name="k1kkY"></a>
  4. ### TCP客户端
  5. ```java
  6. public class MyThread {
  7. public static void main(String[] args) throws IOException {
  8. //创建Socket对象
  9. Socket sock = new Socket("10.30.67.10",80);
  10. //获取输入流
  11. OutputStream getout = sock.getOutputStream();
  12. //将数据写入输入流并发送
  13. getout.write("TCP测试程序".getBytes());
  14. getout.close();
  15. }
  16. }

TCP服务端

  1. public class MyThreadDemo {
  2. public static void main(String[] args) throws IOException {
  3. //创建serversocket对象
  4. ServerSocket ss = new ServerSocket(80);
  5. //监听该端口
  6. Socket s = ss.accept();
  7. //获取该端口内容
  8. InputStream is = s.getInputStream();
  9. byte [] data = new byte[1024];
  10. int i = is.read(data);
  11. String d = new String(data,0,i);
  12. System.out.println(d);
  13. ss.close();
  14. }
  15. }