java udp 工具_java UDP实现一个聊天工具的示例代码

题目:

假设Tom和Jerry利用Java UDP进行聊天,请为他们编写程序。具体如下:

(1)、Tom和Jerry聊天的双方都应该具有发送端和接收端;

(2)、利用DatagramSocket与DatagramPacket;

(3)、实现 java.lang.Runnable类,重写 run()方法。

3113f7a5df0bb98a4066613987443af9.png

学过计网的都知道,利用三元组(ip地址,协议,端口)就可以标识网络的进程了。

而进行通信我们直接运用socket就可以了,首先需要知道是socket是什么,这部分可以参考这个大佬写的博客。

https://www.jb51.net/article/121601.htm

实现一个客户端,那么需要Tom和Jerry都可以实现接收和发送功能,分别用两个线程启动。

接收线程Receive_Thread.java

package Chat_UDP;

import java.io.IOException;

import java.util.Date;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.text.SimpleDateFormat;

public class Receive_Thread extends Thread {

private static final int MAX_RECEIVE_BUFFER = 1024;

private DatagramSocket server;

private DatagramPacket packet;

byte[] buffer = new byte[MAX_RECEIVE_BUFFER];

public Receive_Thread(DatagramSocket server)

{

this.server = server;

packet = new DatagramPacket(buffer, buffer.length);

}

@Override

public void run() {

try

{

while(true)

{

//接收数据包

server.receive(packet);

String s = new String(packet.getData(),packet.getOffset(),packet.getLength(),"UTF-8");

Date day=new Date();

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

if(packet.getPort() == 10001)

System.out.println("Tom"+packet.getAddress()+" 说:"+s+"\t"+df.format(day));

else{

System.out.println("Jerry"+packet.getAddress()+" 说 :"+s+"\t"+df.format(day));

}

packet.setLength(buffer.length);

}

}

catch(IOException e)

{

System.out.println("IOException");

}

}

}

发送线程Send_Thread.java

package Chat_UDP;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.InetSocketAddress;

import java.util.Scanner;

public class Send_Thread extends Thread{

//发送的socket端

private DatagramSocket sender = null;

//待发送的目标地址

private InetSocketAddress address = null;

//从键盘输入

Scanner scan = new Scanner(System.in);

public Send_Thread(DatagramSocket sender,InetSocketAddress address)

{

this.sender = sender;

this.address = address;

}

@Override

public void run() {

// TODO Auto-generated method stub

try

{

while(true)

{

//输入待发送的内容

String input = scan.nextLine();

if(input.equals("exit"))

break;

byte[] data = null;

data = input.getBytes("UTF-8");

//创建UDP数据报

DatagramPacket pack = new DatagramPacket(data, data.length,address);

sender.send(pack);

}

System.out.println("Exit!");

}catch(IOException e)

{

System.out.println("IOException");

}

}

}

聊天服务器

Chat_Server.java

package Chat_UDP;

//杨丽冰 201831064402

import java.net.DatagramSocket;

import java.net.InetSocketAddress;

public class Chat_Server {

private static final int DEST_PORT = 8888;

private static final int SEND_PORT = 10001;

private static final int RECE_PORT = 9000;

private static final String IP = "127.0.0.1";

public static void main(String[] args)

{

try{

Send_Thread send_thread = null;

Receive_Thread rece_thread = null;

InetSocketAddress address = null;

//创建待接受数据包的目的机的端口号和IP地址

address = new InetSocketAddress(IP, DEST_PORT);

//创建发送的Socket端

DatagramSocket sendsocket = new DatagramSocket(SEND_PORT);

//创建接受的Socket端

DatagramSocket recesocket = new DatagramSocket(RECE_PORT);

//发送线程建立

send_thread = new Send_Thread(sendsocket, address);

//接受线程的建立

rece_thread = new Receive_Thread(recesocket);

send_thread.start();

rece_thread.start();

}catch(Exception e)

{

System.out.println("Exception!");

}

}

}

聊天客户端 Chat_Client.java

package Chat_UDP;

//杨丽冰 201831064402

import java.net.DatagramSocket;

import java.net.InetSocketAddress;

public class Chat_Client {

//声明端口号

private static final int DEST_PORT = 9000;

private static final int SEND_PORT = 10000;

private static final int RECE_PORT = 8888;

private static final String IP = "127.0.0.1";

public static void main(String[] args)

{

try{

Send_Thread send_thread = null;

Receive_Thread rece_thread = null;

InetSocketAddress address = null;

//创建待接受数据包的目的机的端口号和IP地址

address = new InetSocketAddress(IP, DEST_PORT);

//创建发送的Socket端

DatagramSocket sendsocket = new DatagramSocket(SEND_PORT);

//创建接受的Socket端

DatagramSocket recesocket = new DatagramSocket(RECE_PORT);

//发送线程建立

send_thread = new Send_Thread(sendsocket, address);

//接受线程的建立

rece_thread = new Receive_Thread(recesocket);

send_thread.start();

rece_thread.start();

}catch(Exception e)

{

System.out.println("Exception!");

}

}

}

需要注意的时候运行的时候需要同时运行聊天服务器和客户端,才能够正常运行。

最终效果如下:

0561eb4c9b8165dd864e0e5a41782693.png

133cc9a04aafaa1c3f02bd98cd555fcc.png

到此这篇关于java UDP实现一个聊天工具的文章就介绍到这了,更多相关java UDP聊天工具内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值