用Java实现聊天程序

 更新时间:2022年09月15日 14:54:18   作者:GYN1996  
这篇文章主要为大家详细介绍了用Java实现聊天程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

利用Java编写聊天程序,供大家参考,具体内容如下

首先计算机网络有两种传输层协议:TCP(面向连接),UDP(面向无连接)。今天就介绍基于这两种协议的聊天程序。

先查明自己电脑的主机名

右键我的电脑-->属性

一、基于UDP的聊天程序

1.基于UDP的发送端

package cn.com;

/**
 * 基于UDP
 * 聊天发送端
 */
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class Send {

    public static void main(String[] args) throws IOException {
        @SuppressWarnings("resource")
        DatagramSocket ds = new DatagramSocket();
        Scanner sc = new Scanner(System.in);
        String line = null;
        while ((line = sc.nextLine()) != null) {
            byte[] buf = line.getBytes();
            int length = buf.length;
            InetAddress address = InetAddress.getByName("1-PC21");//主机名
            DatagramPacket dp = new DatagramPacket(buf, length, address, 10086);   //10086为自己设置的端口号
            ds.send(dp);
        }
        sc.close();
    }

}

2.基于UDP的接收端

package cn.com;

/**
 * 基于UDP
 * 聊天接收端
 */
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class Receive {

    public static void main(String[] args) throws IOException {
        @SuppressWarnings("resource")
        DatagramSocket ds = new DatagramSocket(10086);//端口号需一致

        while (true) {
            byte[] b = new byte[1024 * 1];
            int length = b.length;
            DatagramPacket dp = new DatagramPacket(b, length);
            ds.receive(dp);

            byte[] data = dp.getData();
            int length2 = dp.getLength();
            String hostAddress = dp.getAddress().getHostAddress();
            String s = new String(data, 0, length2);
            System.out.println(s + "来自" + hostAddress);
        }

    }

}

3.先运行接收端,在运行发送端

发送端发送“Hello World”,“My name is Tom”。

接收端收到信息

二、基于TCP的聊天程序

1.客户端

package cn.com;
/**
 * 基于TCP
 * 聊天系统客户端
 */
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

public class Client {

    public static void main(String[] args) throws IOException {
        InetAddress address = InetAddress.getByName("1-PC21");//主机名
        int port = 10089;

        Scanner sc = new Scanner(System.in);
        String line = null;
        while ((line = sc.nextLine()) != null) {
            @SuppressWarnings("resource")
            Socket socket = new Socket(address, port);   //socket要在循环体中定义
            OutputStream os = socket.getOutputStream();
            os.write(line.getBytes());

            // 客户端接收服务端返回的消息(输入流)
            InputStream is = socket.getInputStream();
            byte[] b = new byte[1024 * 1];
            int len = is.read(b);
            String s = new String(b, 0, len);
            System.out.println(s);
        }
        sc.close();

    }

}

2.服务端

package cn.com;

/**
 * 基于TCP
 * 聊天系统服务端
 */
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    public static void main(String[] args) throws IOException {
        @SuppressWarnings("resource")
        ServerSocket ss = new ServerSocket(10089);

        while (true) {
            Socket accept = ss.accept();    //循环中用到accept,所以要在循环中新建定义
            InputStream is = accept.getInputStream();
            byte[] b = new byte[1024 * 1];
            int len = is.read(b);
            String s = new String(b, 0, len);
            System.out.println("已接收客户端内容-->" + s);

            // 给客户端返回数据
            OutputStream os = accept.getOutputStream();
            String content = "客户端接收成功";
            os.write(content.getBytes());

            os.close();
            is.close();
            accept.close();
        }

    }

}

3.还是先打开服务端,再打开客户端,发送信息

客户端发送:“今天星期四”,“天气很好” 两条信息。

服务端收到信息:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java date format时间格式化操作示例

    Java date format时间格式化操作示例

    这篇文章主要介绍了Java date format时间格式化操作,结合具体实例形式分析了java针对日期时间进行格式化操作的相关实现技巧,需要的朋友可以参考下
    2017-03-03
  • SpringMVC实现通过邮件找回密码功能

    SpringMVC实现通过邮件找回密码功能

    本篇文章主要介绍的是SpringMVC实现通过邮件找回密码功能,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。
    2016-10-10
  • java动态构建数据库复杂查询教程

    java动态构建数据库复杂查询教程

    这篇文章主要介绍了java动态构建数据库复杂查询的实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-11-11
  • Jmeter测试必知的名词及环境搭建

    Jmeter测试必知的名词及环境搭建

    我们本章开始学习Jmeter,后续还会有RF以及LoadRunner 的介绍,为什么要学习Jmeter,它主要是用来做性能测试的,其中它也需要间接或直接的需要用到抓包工具
    2021-09-09
  • Java冒泡排序及优化介绍

    Java冒泡排序及优化介绍

    大家好,本篇文章主要讲的是Java冒泡排序及优化介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • SpringBoot+VUE实现数据表格的实战

    SpringBoot+VUE实现数据表格的实战

    本文将使用VUE+SpringBoot+MybatisPlus,以前后端分离的形式来实现数据表格在前端的渲染,具有一定的参考价值,感兴趣的可以了解一下
    2021-08-08
  • 一文搞清楚Spring事务

    一文搞清楚Spring事务

    Spring事务是指在Spring框架中对于数据库操作的一种支持,它通过对一组数据库操作进行整体控制来保证数据的一致性和完整性。本文介绍Spring事务介绍的非常详细,有需要的朋友可以参考本文
    2023-04-04
  • SpringBoot启动多数据源找不到合适的驱动类问题

    SpringBoot启动多数据源找不到合适的驱动类问题

    这篇文章主要介绍了SpringBoot启动多数据源找不到合适的驱动类问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 使用bitset实现毫秒级查询(实例讲解)

    使用bitset实现毫秒级查询(实例讲解)

    下面小编就为大家带来一篇使用bitset实现毫秒级查询(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 常见JavaWeb安全问题和解决方案

    常见JavaWeb安全问题和解决方案

    这篇文章主要介绍了常见JavaWeb安全问题和解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论