Java聊天室之实现获取Socket功能

 更新时间:2022年10月18日 14:21:56   作者:小虚竹and掘金  
这篇文章主要为大家详细介绍了Java简易聊天室之实现获取远程服务器和客户机的IP地址和端口号功能,文中的示例代码讲解详细,需要的可以了解一下

一、题目描述

题目实现:获取远程服务器和客户机的IP地址和端口号。

二、解题思路

创建一个服务器类:ServerSocketFrame,继承JFrame类

写一个getserver() 方法,实例化Socket对象,启用9527当服务的端口。

创建一个客户端类:ClientSocketFrame,继承JFrame类。

写一个connect() 方法,实例化Socket对象,连接本地服务的9527端口服务。

获得远程服务器的地址:socket.getInetAddress();

获得远程服务器的IP地址 :netAddress.getHostAddress()

获得远程服务器的端口号:socket.getPort()

获得客户端的地址:socket.getLocalAddress()

获得客户端的IP地址:localAddress.getHostAddress()

获得客户端的端口号:socket.getLocalPort()

三、代码详解

ServerSocketFrame

package com.xiaoxuzhu;
import java.awt.BorderLayout;
import java.net.*;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
/**
 * Description: 
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre>
 * 修改记录:
 * 修改后版本	        修改人		修改日期			修改内容
 * 2022/5/31.1	    xiaoxuzhu		2022/5/31		    Create
 * </pre>
 * @date 2022/5/31
 */

public class ServerSocketFrame extends JFrame {
    private JTextArea ta_info;
    private ServerSocket server; // 声明ServerSocket对象
    private Socket socket; // 声明Socket对象socket

    public void getserver() {
        try {
            server = new ServerSocket(9527); // 实例化Socket对象
            ta_info.append("服务器套接字已经创建成功\n"); // 输出信息
            while (true) { // 如果套接字是连接状态
                ta_info.append("等待客户机的连接......\n"); // 输出信息
                socket = server.accept(); // 实例化Socket对象
                ta_info.append("连接成功......\n");
            }
        } catch (Exception e) {
            e.printStackTrace(); // 输出异常信息
        }
    }

    public static void main(String[] args) { // 主方法
        ServerSocketFrame frame = new ServerSocketFrame(); // 创建本类对象
        frame.setVisible(true);
        frame.getserver(); // 调用方法
    }

    public ServerSocketFrame() {
        super();
        setTitle("服务器端程序");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 336, 257);

        final JScrollPane scrollPane = new JScrollPane();
        getContentPane().add(scrollPane, BorderLayout.CENTER);

        ta_info = new JTextArea();
        scrollPane.setViewportView(ta_info);
    }
}

ClientSocketFrame

package com.xiaoxuzhu;
import java.awt.BorderLayout;
import java.net.*;
import javax.swing.*;
import javax.swing.JScrollPane;

/**
 * Description: 
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre>
 * 修改记录:
 * 修改后版本	        修改人		修改日期			修改内容
 * 2022/5/31.1	    xiaoxuzhu		2022/5/31		    Create
 * </pre>
 * @date 2022/5/31
 */

public class ClientSocketFrame extends JFrame { // 创建类继承JFrame类
    private Socket socket; // 声明Socket对象
    private JTextArea ta = new JTextArea(); // 创建JtextArea对象

    public ClientSocketFrame() { // 构造方法
        super(); // 调用父类的构造方法
        setTitle("获取Socket信息");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 351, 257);
        final JScrollPane scrollPane = new JScrollPane();
        getContentPane().add(scrollPane, BorderLayout.CENTER);
        scrollPane.setViewportView(ta);
    }

    private void connect() { // 连接套接字方法
        ta.append("尝试连接......\n"); // 文本域中信息信息
        try { // 捕捉异常
            socket = new Socket("127.0.0.1", 9527); // 实例化Socket对象
            ta.append("完成连接。\n"); // 文本域中提示信息
            InetAddress netAddress = socket.getInetAddress();// 获得远程服务器的地址
            String netIp = netAddress.getHostAddress();// 获得远程服务器的IP地址 
            int netPort = socket.getPort();// 获得远程服务器的端口号
            InetAddress localAddress = socket.getLocalAddress();// 获得客户端的地址
            String localIp = localAddress.getHostAddress();// 获得客户端的IP地址
            int localPort = socket.getLocalPort();// 获得客户端的端口号
            ta.append("远程服务器的IP地址:" + netIp + "\n");
            ta.append("远程服务器的端口号:" + netPort + "\n");
            ta.append("客户机本地的IP地址:" + localIp + "\n");
            ta.append("客户机本地的端口号:" + localPort + "\n");
        } catch (Exception e) {
            e.printStackTrace(); // 输出异常信息
        }
    }

    public static void main(String[] args) { // 主方法
        ClientSocketFrame clien = new ClientSocketFrame(); // 创建本例对象
        clien.setVisible(true); // 将窗体显示
        clien.connect(); // 调用连接方法
    }
}

服务器启动,等待连接

客户端连接上

服务器提示,客户端连接成功

到此这篇关于Java聊天室之实现获取Socket功能的文章就介绍到这了,更多相关Java聊天室内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实现中文算数验证码的实现示例(算数运算+-*/)

    Java实现中文算数验证码的实现示例(算数运算+-*/)

    这篇文章主要介绍了Java实现中文算数验证码的实现示例(算数运算+-*/),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • java类和对象原理与用法分析

    java类和对象原理与用法分析

    这篇文章主要介绍了java类和对象原理与用法,结合实例形式分析了java类和对象的相关概念、功能、原理、使用技巧与操作注意事项,需要的朋友可以参考下
    2020-02-02
  • java并发请求下数据插入重复问题的解决方法

    java并发请求下数据插入重复问题的解决方法

    现在遇到一个项目,移动设备存储数据,然后一起上传,那就出现了许多重复数据,这篇文章主要给大家介绍了关于java并发请求下数据插入重复问题的解决方法,需要的朋友可以参考下
    2021-11-11
  • Java中如何避免sql注入实例详解

    Java中如何避免sql注入实例详解

    SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法用户钻了SQL的空子,下面这篇文章主要给大家介绍了关于Java中如何避免sql注入的相关资料,需要的朋友可以参考下
    2022-01-01
  • mybatis 一对多映射 column属性的注意事项说明

    mybatis 一对多映射 column属性的注意事项说明

    这篇文章主要介绍了mybatis 一对多映射 column属性的注意事项说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。
    2022-01-01
  • 在实践中了解Java反射机制应用

    在实践中了解Java反射机制应用

    当程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言。我们认为java并不是动态语言,但是它却有一个非常突出的动态相关机制,俗称:反射。下面我们来简单学习一下吧
    2019-05-05
  • SpringBoot+MySQL实现读写分离的多种具体方案

    SpringBoot+MySQL实现读写分离的多种具体方案

    在高并发和大数据量的场景下,数据库成为了系统的瓶颈。为了提高数据库的处理能力和性能,读写分离成为了一种常用的解决方案,本文将介绍在Spring Boot项目中实现MySQL数据库读写分离的多种具体方案,需要的朋友可以参考下
    2023-06-06
  • 深入学习Spring Boot排查 @Transactional 引起的 NullPointerException问题

    深入学习Spring Boot排查 @Transactional 引起的 NullPointerException问题

    这篇文章主要介绍了深入学习Spring Boot排查 @Transactional 引起的 NullPointerException问题,需要的朋友可以参考下
    2018-01-01
  • 详解Mybatis核心类SqlSessionFactory的构建

    详解Mybatis核心类SqlSessionFactory的构建

    这篇文章主要为大家详细介绍了Mybatis核心类SqlSessionFactory的构建过程,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-12-12
  • SpringBoot实现其他普通类调用Spring管理的Service,dao等bean

    SpringBoot实现其他普通类调用Spring管理的Service,dao等bean

    这篇文章主要介绍了SpringBoot实现其他普通类调用Spring管理的Service,dao等bean,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论