【Day29】网络编程

本文详细介绍了Java中的InetAddress类如何获取IP地址,包括getLocalHost()和getByName()方法,以及Socket类的常用构造器和方法,如getInputStream()和getOutputStream()。通过示例展示了服务器端如何接收和响应客户端的请求,客户端如何发送数据并接收服务器响应。
摘要由CSDN通过智能技术生成

目录

一、InetAddress类(获取IP地址)

二、Socket类的常用构造器和常用方法

服务器端代码

客户端代码


一、InetAddress类(获取IP地址)

/**
 * InetAddress类没有提供公共的构造器,而是提供了如下几个静态方法来获取 InetAddress实例       public static InetAddress getLocalHost()
 * public static InetAddress getByName(String host
 * InetAddress提供了如下几个常用的方法
 * public String getHostAddress():返回 IP 地址字符串(以文本表现形式)。
 * public String getHostName():获取此 IP 地址的主机名
 * public boolean isReachable(int timeout):测试是否可以达到该地址
 *
 */

二、Socket类的常用构造器和常用方法

/**
 *  Socket类的常用构造器:
 *      public Socket(InetAddress address,int port)创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
 *      public Socket(String host,int port)创建一个流套接字并将其连接到指定主机上的指定端口号。
 *  Socket类的常用方法:
 *      public InputStream getInputStream()返回此套接字的输入流。可以用于接收网络消息
 *      public OutputStream getOutputStream()返回此套接字的输出流。可以用于发送网络消息
 *      public InetAddress getInetAddress()此套接字连接到的远程 IP 地址;如果套接字是未连接的,则返回 null。
 *      public InetAddress getLocalAddress()获取套接字绑定的本地地址。 即本端的IP地址
 *      public int getPort()此套接字连接到的远程端口号;如果尚未连接套接字,则返回 0。
 *      public int getLocalPort()返回此套接字绑定到的本地端口。 如果尚未绑定套接字,则返回 -1。即本端的端口号。
 *      public void close()关闭此套接字。套接字被关闭后,便不可在以后的网络连接中使用(即无法重新连接
 *      或重新绑定)。需要创建新的套接字对象。 关闭此套接字也将会关闭该套接字的 InputStream 和OutputStream。
 *      public void shutdownInput()如果在套接字上调用 shutdownInput() 后从套接字输入流读取内容,则流将
 *      返回 EOF(文件结束符)。 即不能在从此套接字的输入流中接收任何数据。
 *      public void shutdownOutput()禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发
 *      送,并且后跟 TCP 的正常连接终止序列。 如果在套接字上调用 shutdownOutput() 后写入套接字输出流,
 *      则该流将抛出 IOException。 即不能通过此套接字的输出流发送任何数据。
 */

服务器端代码

ublic class ServerTest {
    public static void main(String[] args) {
        ServerSocket socket=null;
        Socket socket1=null;
        InputStream is=null;
        BufferedReader br=null;
        OutputStream os =null;
        try {
            socket=new ServerSocket(10086);

            //服务器通过监听方法来获取客户端的请求
            socket1=socket.accept();

            //通过返回的Socket对象调用方法获取一个输入流来读取客户端发送过来的消息
            is=socket1.getInputStream();

            //通过输入流读取客户端发送的消息
            br=new BufferedReader(new InputStreamReader(is));
            String str =br.readLine();
            System.out.println("我是服务器,客户端发送给我的数据是"+str);
            socket1.shutdownInput();
            //服务器接受客户端消息后,需要给客户端一个响应信息
            os = socket1.getOutputStream();
            String str1="用户名和密码正确,可以登录";
            byte[] bytes = str1.getBytes();
            os.write(bytes);
            System.out.println("给客户但发送成功");

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                socket.close();
                socket1.close();
                is.close();
                br.close();
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

客户端代码

public abstract class ClientTest {
    public static void main(String[] args) {

        Socket socket=null;
        OutputStream outputStream=null;
        InputStream inputStream =null;
        BufferedReader bufferedReader =null;

        //创建通信链路的断电客户套接字
        try {
            socket=new Socket("127.0.0.1",10086);

            //获取输出流将数据发送出去
            outputStream=socket.getOutputStream();
            String str="用户名,张三;密码、123456";
            byte[] bytes = str.getBytes();

            //通过输出流调用方法将信息发送出去
            outputStream.write(bytes);
            //关闭通道
            socket.shutdownOutput();

            //客户端需要通过输入流读取服务器端发送过来的消息
            inputStream = socket.getInputStream();
            bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String str1= bufferedReader.readLine();
            System.out.println("我是客户端,接收到的服务器端响应信息为:"+str1);

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                socket.close();
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

老板大气,I am happy

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值