用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双色球机选法程序解析

    java双色球机选法程序解析

    这篇文章主要为大家详细解析了java双色球机选法程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • Java管理对象方法总结

    Java管理对象方法总结

    在本篇文章中小编给大家分享了关于Java管理对象方法以及相关代码知识点,需要的朋友们跟着学习下。
    2019-05-05
  • 使用Eclipse开发工具如何解决Java Compiler中Annotation Processin不出现的问题

    使用Eclipse开发工具如何解决Java Compiler中Annotation Processin不出现的问题

    这篇文章主要介绍了使用Eclipse开发工具如何解决Java Compiler中Annotation Processin不出现的相关资料,需要的朋友可以参考下
    2015-11-11
  • Java 十大排序算法之计数排序刨析

    Java 十大排序算法之计数排序刨析

    计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法
    2021-11-11
  • java数据结构基础:单链表与双向链表

    java数据结构基础:单链表与双向链表

    这篇文章主要为大家详细介绍了java实现单链表、双向链表的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • spring boot+thymeleaf+bootstrap实现后台管理系统界面

    spring boot+thymeleaf+bootstrap实现后台管理系统界面

    这篇文章主要为大家详细介绍了spring boot+thymeleaf+bootstrap简单实现后台管理系统界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • java由JABXContext注解读取xml配置文件方式

    java由JABXContext注解读取xml配置文件方式

    这篇文章主要介绍了java由JABXContext注解读取xml配置文件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • java数据库连接池新手入门一篇就够了,太简单了!

    java数据库连接池新手入门一篇就够了,太简单了!

    数据库连接池负责分配、管理和释放数据库连接,释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏,这项技术能明显提高对数据库操作的性能
    2021-06-06
  • 浅析Java类和数据结构中常用的方法

    浅析Java类和数据结构中常用的方法

    下面小编就为大家带来一篇浅析Java类和数据结构中常用的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • Java实现threadLocal线程池获取

    Java实现threadLocal线程池获取

    本文主要介绍了Java实现threadLocal线程池获取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论