用Java完成一个简单的网络聊天(使用udp协议)

Udp协议 发送端和接受端的代码实现(socket编程)
发送端:
构造方法:
DatagramSocket datagramSocket = new DatagramSocket();
发送:
datagramSocket.send(数据报包);
创建数据报包的方法:
DatagramPacket datagramPacket = new DatagramPacket(byte[] length,address,port);
参数1:将内容转换为字节数组
参数2:字节数组长度
参数3:ip地址对象
参数4:端口号

接受端:
构造方法:
DatagramSocket datagramSocket = new DatagramSocket();
接受:
datagramSocket.receive( datagramPacket );
创建接受器:
DatagramPacket datagramPacket = new DatagramPacket( bytes, bytes.length );
接受真实数据:
byte[] data = datagramPacket.getData();
接受实际字节数组的长度
int length = datagramPacket.getLength();
获取发送的ip地址
String ip=datagramPacket.getAddress().getHostAddress();

那么在这些基础上,去写出一个既可以接受也可以发送的,那么可以考虑使用多线程的方法,来进行操作,具体如下:

package com.bxq.demo1.udpjieshou;
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class Test {
    public static void main(String[] args) throws IOException {
        ExecutorService executorService = Executors.newFixedThreadPool( 2 );
        //建立线程池,线程池可以放两个线程,一个发送线程,一个接受线程
        Future<?> submit = executorService.submit( new Test1() );
        Future<?> submit1 = executorService.submit( new Test2() );
    }
}
class Test1 implements Runnable{
    public void run() {
        DatagramSocket datagramSocket = null;
        try {
            datagramSocket = new DatagramSocket();//创建发送的构造器
        } catch (SocketException e) {
            e.printStackTrace();
        }
        Scanner scanner = new Scanner(System.in);
        while(true){
            String s = scanner.next();
            byte[] b=s.getBytes();		//吧输入的字符串转换为字节数组
            InetAddress byName = null;
            try {
                byName = InetAddress.getByName( "xx.xx.xxx.xx" );//填上想要发送的对象的ip地址
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
            DatagramPacket datagramPacket = new DatagramPacket(b,b.length,byName,10086);
			//创建数据报包,内容为发送内容,发送内容大小,发送的地址,以及端口号
            try {
                datagramSocket.send( datagramPacket );
                //吧数据包发送出去
            } catch (IOException e) {
                e.printStackTrace();
            }
            if(s.equals( "886" )){
                break;
            }
        }
        datagramSocket.close();
    }
}
class Test2 implements Runnable{
    public void run() {
        DatagramSocket ds = null;
        try {
            ds = new DatagramSocket(10086);//创建接受构造器
        } catch (SocketException e) {
            e.printStackTrace();
        }
        byte[] bts = new byte[1024];
        int length = bts.length;
        DatagramPacket dp = new DatagramPacket(bts,length);	创建接受的包
        while(true){
            try {
                ds.receive (dp);	//在构造器中放入包
            } catch (IOException e) {
                e.printStackTrace();
            }
            byte[] bts2 = dp.getData();	//获取实际的对方发送的内容
            int length2 = dp.getLength();//获取对方实际发送的大小
            String receiveMes = new String(bts2,0,length2);//接受对方发送的内容,并转换为字符串
            String ip = dp.getAddress().getHostAddress();
            System.out.println(receiveMes+"ip:"+ip);
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要使用Java开发聊天软件,你需要以下步骤: 1. 安装Java开发环境,比如Eclipse或IntelliJ IDEA。 2. 选择一种通信协议,比如TCP或UDP。 3. 使用Java网络编程API,创建一个服务器套接字来监听来自客户端的连接。 4. 当服务器接收到客户端连接时,为该客户端创建一个新的套接字,并使用它与客户端通信。 5. 使用Java线程API,为每个客户端创建一个新的线程,用于独立地处理来自该客户端的消息。 6. 使用Java图形用户界面(GUI)API,创建一个简单聊天窗口,用于显示来自服务器和其他客户端的消息。 7. 实现聊天软件的其他功能,比如私聊、文件传输等。 希望这些信息对你有帮助。 ### 回答2: 使用Java开发一个聊天软件,可以分为以下几个步骤。 首先,需要建立一个服务器端和多个客户端。服务器端负责接收和处理客户端的连接请求,并转发消息给其他客户端。可以使用Java的Socket类来实现网络通信。 接下来,需要定义一种通信协议,用于客户端和服务器端之间的消息传递。可以使用Java的对象序列化技术,将消息对象序列化为字节流进行传输。消息对象可以包含发送方、接收方、消息内容等属性。 在服务器端,需要维护一个客户端列表,用于存储已连接的客户端对象。当有新的客户端连接时,将其加入列表;当客户端断开连接时,从列表中移除。可以使用Java的集合类如List或HashMap来实现。 对于客户端,可以使用Java的图形用户界面(GUI)库如JavaFX或Swing来实现用户界面。用户可以输入消息并发送给服务器端,同时接收其他客户端发送的消息。需要一个线程来监听服务器端传来的消息,以保持实时更新。 在图形界面中,可以提供一些额外的功能,如显示在线用户列表、私聊功能、发送文件等。这些功能可以通过客户端与服务器端之间的消息传递来实现。例如,当用户点击某个在线用户时,可以发送一个特殊的类型消息给服务器端,表示希望与该用户进行私聊。 最后,需要进行测试和调试,以确保软件的正常运行和稳定性。可以使用不同的设备和用户角色(服务器端和客户端)来模拟不同的场景。 总的来说,使用Java开发一个聊天软件需要建立服务器端和多个客户端,定义通信协议,实现消息传递和界面交互,提供额外的功能,并进行测试和调试。这只是一个简单的概述,具体的开发过程还需要根据需求和设计进行调整和完善。 ### 回答3: 使用Java开发一个聊天软件需要考虑以下几个方面: 1. 用户界面设计:使用Java提供的Swing或JavaFX库,设计一个用户友好的聊天界面。通过布局管理器来安排不同的组件,如聊天窗口、输入框和发送按钮等。 2. 网络通信:利用Java提供的Socket类来实现客户端和服务器之间的通信。使用TCP协议建立稳定的连接,可以使用ServerSocket class在服务器端监听来自客户端的连接请求,然后创建一个新的线程来处理每个连接。 3. 用户身份验证:在聊天软件中,用户必须先进行身份验证,以确保只有合法的用户才能登录,发送消息和接收消息。可以使用数据库存储用户信息,并设计合适的登录窗口,包含用户名和密码输入字段,并在服务器端验证用户的身份。 4. 消息传输和处理:当用户发送消息时,在客户端将消息发送到服务器端,服务器端再将消息广播给所有在线的用户。可以使用Java的线程和流来处理收发消息的功能。 5. 控制命令:考虑一些额外功能,如创建群聊、添加好友、发送文件等。可以使用命令模式来处理这些功能,并在用户界面上提供相应的选项和按钮。 总体来说,开发一个聊天软件需要综合利用Java的GUI库、网络通信、数据库和多线程技术来实现。通过合理的架构设计和实现,使得聊天软件能够稳定、高效地进行用户间的消息传输和交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值