java udp接收线程_通过 UDP+多线程 实现聊天功能

本文展示了一个使用Java实现的基于UDP协议的简单聊天程序。程序通过创建两个线程,一个用于发送数据,一个用于接收数据。发送线程通过DatagramSocket在端口10006发送数据到127.0.0.1的10007端口,接收线程则在端口10007监听并打印接收到的数据。当接收到'over'时,发送线程结束,表明聊天结束。
摘要由CSDN通过智能技术生成

package liu.net.udp;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

import javax.swing.plaf.synth.SynthSpinnerUI;

public class ChatUseUdp {

public static void main(String[] args) throws SocketException {

//通过   UDP+多线程  实现聊天功能

//通过UDP协议完成一个聊天程序。一个负责发送数据的任务。一个负责接收数据的任务。两个任务需要同时进行,用多线程技术

//创建socket服务

DatagramSocket send = new DatagramSocket(10006);

//此端口需要与发送端指定的端口一致,否则接收不到数据

DatagramSocket rece = new DatagramSocket(10007);

new Thread(new Send(send)).start();

new Thread(new Receive(rece)).start();

}

}

//实现发送数据的类

class Send implements Runnable {

private DatagramSocket ds;

public Send(DatagramSocket ds) {

super();

this.ds = ds;

}

public void run() {

//具体要发送数据的内容

//1.从键盘输入发送的数据

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

//读取数据

String line = null;

try{

while((line=bf.readLine())!=null){

//2.将数据封装到数据包中

byte[] buf = line.getBytes();

DatagramPacket dp = new DatagramPacket(buf,buf.length,

InetAddress.getByName("127.0.0.1"),10007);

//3.把数据发送出去

ds.send(dp);

if("over".equals(line)){

break;

}

}

ds.close();

}catch(IOException e){

e.printStackTrace();

}

}

}

//实现接收数据的类

class Receive implements Runnable {

private DatagramSocket ds;

public Receive(DatagramSocket ds) {

super();

this.ds = ds;

}

public void run() {

while(true){

//接收的具体任务内容

//1.因为接收的数据最终都会存储到数据包中,而数据包中必须有字节数组

byte[] buf = new byte[1024];

//2.创建数据包对象

DatagramPacket dp = new DatagramPacket(buf,buf.length);

//3.将收到的数据存储到数据包中

try {

ds.receive(dp);

} catch (IOException e) {

e.printStackTrace();

}

//4.获取数据

String ip = dp.getAddress().getHostAddress();

String data = new String(dp.getData(),0,dp.getLength());

System.out.println(ip+":"+data);

if("over".equals(data)){

System.out.println(ip+":离开聊天室");

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值