java基础——UDP实现dos聊天室案例
Posted 名字真的很急用
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础——UDP实现dos聊天室案例相关的知识,希望对你有一定的参考价值。
利用UDP网络编程
UDP协议不严格区分发送端和接收端
- 发送端
//udp打包
byte [] b = "固定".getBytes();
//DatagramPacket(byte[] buf, int length, InetAddress address, int port)
//构造用于发送长度的分组的数据报包 length指定主机上到指定的端口号。
DatagramPacket dp = new DatagramPacket(b,b.length,InetAddress.getByName("localhost"),6666);//localhost/127.0.0.1
//数据的发送
//发送包
DatagramSocket ds = new DatagramSocket();
ds.send(dp);
- 接收端
//创建DatagramSocket来接收数据报包
DatagramSocket ds = new DatagramSocket(6666);
//接收发送端过来的数据报包
//该方法的参数 需要一个DatagramPacket
//DatagramPacket(byte[] buf, int length)
//构造一个 DatagramPacket用于接收长度的数据包 length 。
byte [] b = new byte[1024];
//创建一个容器 用来接收发送端的数据报包
DatagramPacket dp = new DatagramPacket(b,1024);
ds.receive(dp);//接收
//输出
//System.out.println(ds);
// byte[] getData()
//返回数据缓冲区
b = dp.getData();
//将byte转换为字符串
//遍历数组 取值
// for(byte date:b) {
// System.out.println(date);
// }
//String(byte[] bytes, int offset, int length)
//通过使用平台的默认字符集解码指定的字节子阵列来构造新的 String 。
String s = new String(b,0,dp.getLength());
package BJday28;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
public class Chat {
public static void main(String[] args) {
new Thread(){
@Override
public void run() {
DatagramPacket dp=null;
DatagramSocket ds=null;
Scanner sc = new Scanner(System.in);
while (true){
String mesg = sc.next();
byte [] b = mesg.getBytes();
if (mesg.toLowerCase().equals("no")){
break;
//system.exit(0);
}else {
try {
dp = new DatagramPacket(b,b.length,InetAddress.getByName("localhost"),6666);
ds = new DatagramSocket();
ds.send(dp);
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}finally {
if(ds!=null) {
try {
ds.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}
}
}
}.start();
//客户端
new Thread(){
@Override
public void run() {
DatagramSocket ds=null;
DatagramPacket dp=null;
while(true) {
byte [] b = new byte[1024];
try {
ds = new DatagramSocket(3333);
dp = new DatagramPacket(b,1024);
ds.receive(dp);//接收
b = dp.getData();
String s = new String(b,0,dp.getLength());
System.out.println(s);
} catch (IOException e) {
e.printStackTrace();
}finally {
if (ds!=null){
try {
ds.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}.start();
}
}
package BJday28;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
public class ChatClient {
public static void main(String[] args) {
new Thread(){
@Override
public void run() {
DatagramPacket dp=null;
DatagramSocket ds=null;
Scanner sc = new Scanner(System.in);
while (true){
String mesg = sc.next();
byte [] b = mesg.getBytes();
if (mesg.toLowerCase().equals("no")){
break;
//system.exit(0);
}else {
try {
dp = new DatagramPacket(b,b.length,InetAddress.getByName("localhost"),3333);
ds = new DatagramSocket();
ds.send(dp);
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}finally {
if(ds!=null) {
try {
ds.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}
}
}
}.start();
//客户端
new Thread(){
@Override
public void run() {
DatagramSocket ds=null;
DatagramPacket dp=null;
while(true) {
byte [] b = new byte[1024];
try {
ds = new DatagramSocket(6666);
dp = new DatagramPacket(b,1024);
ds.receive(dp);//接收
b = dp.getData();
String s = new String(b,0,dp.getLength());
System.out.println(s);
} catch (IOException e) {
e.printStackTrace();
}finally {
if (ds!=null){
try {
ds.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}.start();
}
}
以上是关于java基础——UDP实现dos聊天室案例的主要内容,如果未能解决你的问题,请参考以下文章
javase基础学完可以做什么,javase实现局域网聊天室