Java 网络编程


InetAddress 类

该类用于封装一个ip地址,并提供了一系列与IP地址相关的方法

方法名 作用
getByName(String) 传递主机名以获得指定地址对象
getLocalHost() 直接返回本地主机地址对象
getHostName() 根据地址对象获取主机名
getHostAddress() 根据地址对象获取ip地址
public static void main(String[] args) throws Exception {
    InetAddress local = InetAddress.getLocalHost();
    InetAddress remote = InetAddress.getByName("www.baidu.com");
    
    System.out.println("本机的IP地址:" + local.getHostAddress());
    System.out.println("IP地址:" + remote.getHostAddress());
    System.out.println("主机名为:" + remote.getHostName());    }

UDP(用户数据报协议)

属于面向无连接通信协议,消耗资源小,通信效率高,但不保证数据完整性

创建发送端

  1. 建立DatagramSocket对象。如果不想随机配置端口号,可以手动指定。
  2. 将数据进行packet包的封装,必须要指定目的地地址和端口。
  3. 通过socket服务的send方法将该包发出。
  4. 将socket关闭。
DatagramSocket socket = new DatagramSocket();
String str = "i love you";
// 把数据进行封装到数据报包中        
DatagramPacket packet = new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("localhost"),6666);
socket.send(packet);
// 发送
socket.close();

创建接收端

  1. 建立DatagramSocket对象。要监听一个端口。
  2. 通过socket的receive方法将数据存入数据包中。
  3. 通过数据包dp的方法getData()、getAddress()、getPort()等方法获取包中的指定信息。
  4. 将socket关闭
DatagramSocket socket = new DatagramSocket(6666);
byte[] buff = new byte[100];
DatagramPacket packet = new DatagramPacket(buff, 100);
socket.receive(packet);
// 接受传来的数据包
System.out.println(new String(buff, 0, packet.getLength()));

TCP(传输控制协议)

属于面向连接的通信协议,在传输数据前先建立逻辑连接,提供了可靠无差错的数据传输

创建服务端步骤:

  1. 创建一个ServerSocket对象
  2. 调用accept()方法接受客户端请求
  3. 从Socket中获取I/O流
  4. 对I/O流进行读写操作,完成与客户端的交互
  5. 关闭I/O流和Socket
// 1.创建一个ServerSocket对象
ServerSocket serverSocket = new ServerSocket(8888);
// 2.调用accept()方法接受客户端请求
Socket socket = serverSocket.accept();
System.out.println("成功连接"+socket.getInetAddress().getHostAddress());
// 3.获取socket对象的输入输出流
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
String line = null;
// 读取客户端传过来的数据
while ((line = br.readLine()) != null) {
    if (line.equals("over")) {
        break;
    }	
    System.out.println(line);
    pw.println(line.toUpperCase());
}
pw.close();
br.close();
socket.close();
System.out.println(socket.getInetAddress().getHostAddress() + "断开连接");

创建客户端步骤:

  1. 创建一个Socket对象
  2. 从Socket中获取I/O流
  3. 对I/O流进行读写操作,完成与服务端的交互
  4. 关闭I/O流和Socket
Socket socket = new Socket("127.0.0.1", 8888);
BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true) {
    String line = br.readLine();
    // 获取键盘所输入的字符串
    pw.println(line);
    if (line.equals("over")) {
        break;
    }
    // 获取服务端传过来的大写字符串
    System.out.println(reader.readLine());
}
reader.close();
br.close();
pw.close();
socket.close();

这部分内容比较简单也不常用到,选择简单跳过

posted @ 2020-05-02 10:19  鹿友  阅读(146)  评论(0编辑  收藏  举报