Java(五) 网络通信

欢迎关注我的B站账号:卍卍子非鱼卍卍

网络通信

InetAddress

InetAddress.getLocalHost() 返回本地主机的InetAddress对象

host.getHostName() 获取主机名

host.getHostAddress() 获取主机ip地址

使用以上方法可能会抛出UnknownHostException异常,表示主机不存在

InetAddress host;
try {
    host = InetAddress.getLocalHost();
    String hostname = host.getHostName();
    String ip = host.getHostAddress();
} catch(UnknownHostException e) {
    e.printStackTrace();
}

实例

下面的实例实现了客户端与服务器端的通信,客户端接收用户输入的字符串传递给服务器端,服务器端读取字符串,显示在终端上并返回给客户端,客户端接收到服务器端发来的字符串同样显示在终端上,双方接收到".QUIT"时结束通信

客户端

import java.net.*;
import java.io.*;

public class ClientTest {
    public static void main(String[] args) {
        try {
            Socket client = new Socket("127.0.0.1", 8001); // 建立连接,ip地址127.0.0.1,端口号8001
            System.out.println("连接已建立");
            DataInputStream in = new DataInputStream(client.getInputStream()); // 建立输入流
            DataOutputStream out = new DataOutputStream(client.getOutputStream()); // 建立输出流
            String line = "";
            while (!line.equalsIgnoreCase(".QUIT")) {
                System.out.println("输入消息:");
                line = readLine();
                System.out.println("正在向服务器发送数据");
                out.writeUTF(line);
                System.out.println("正在等待服务器响应数据");
                line = in.readUTF();
                System.out.println("接收数据:" + line);
            }
            in.close(); // 关闭输入流
            out.close(); // 关闭输出流
            client.close(); // 关闭连接
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    public static String readLine() {
        String str = "";
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        try {
            str = in.readLine();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return str;
    }
}

服务器端

import java.net.*;
import java.io.*;

public class ServerTest {
    public static void main(String[] args) {
        try {
            ServerSocket server = new ServerSocket(8001); // 建立服务,监听端口号8001
            System.out.println("服务已建立于端口" + server.getLocalPort());
            while (true) {
                Socket connection = server.accept(); // 此时接收到客户端的连接请求,建立连接
                System.out.println("连接已建立");
                DataInputStream in = new DataInputStream(connection.getInputStream()); // 建立输入流
                DataOutputStream out = new DataOutputStream(connection.getOutputStream()); // 建立输出流
                String line = "";
                while (!line.equalsIgnoreCase(".QUIT")) {
                    line = in.readUTF();
                    System.out.println("服务器接收数据:" + line);
                    out.writeUTF(line);
                }
                in.close(); // 关闭输入流
                out.close(); // 关闭输出流
                connection.close(); // 关闭连接
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值