「javaudp聊天」java udp 简单聊天室

博主:adminadmin 2023-01-23 11:09:10 302

今天给各位分享javaudp聊天的知识,其中也会对java udp 简单聊天室进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

用java语言实行一个UDP聊天室 多客户 无图形用户界面

这是很久以前在网上找的,略作修改的一个小案例UDP聊天的,供你参考,改改里面的ip地址。

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetSocketAddress;

public class UDPClient {

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

new UDPClient().go();

}

private void go() {

ClientSendThread send = new ClientSendThread();

new Thread(send).start();

ClientRecvThread recv = new ClientRecvThread();

new Thread(recv).start();

}

class ClientSendThread implements Runnable {

@Override

public void run() {

try {

DatagramSocket ds = new DatagramSocket();

String str = "";

byte[] buf = null;

while (true) {

System.out.println("请输入");

BufferedReader br = new BufferedReader(

new InputStreamReader(System.in));

str = br.readLine();

if ("bye".equals(str))

break;

buf = str.getBytes();

// System.out.println("-----buf.length-------" + buf.length);

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

new InetSocketAddress("127.0.0.1", 5678));

ds.send(dp);

buf = null;

}

ds.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

class ClientRecvThread implements Runnable {

@Override

public void run() {

byte[] buf = new byte[1024];

//接收端的端口需要指定,不然发送端不知道向哪个端口发送数据包

DatagramSocket ds;

try {

ds = new DatagramSocket(5679);

String message = "";

DatagramPacket dp = null;

while(true){

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

ds.receive(dp);

message = new String(buf,0,dp.getLength());

System.out.println("接收到Server端信息为:"+message);

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetSocketAddress;

public class UDPServer {

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

new UDPServer().go();

}

private void go() {

//服务端启动2个线程,1个发送,1个接收

ServerSendThread send = new ServerSendThread();

new Thread(send).start();

ServerRecvThread recv = new ServerRecvThread();

new Thread(recv).start();

}

// 服务端发送线程

class ServerSendThread implements Runnable{

@Override

public void run() {

try {

DatagramSocket ds = new DatagramSocket();

String str = "";

byte[] buf = null;

while (true) {

System.out.println("请输入");

BufferedReader br = new BufferedReader(

new InputStreamReader(System.in));

str = br.readLine();

if ("bye".equals(str))

break;

buf = str.getBytes();

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

new InetSocketAddress("192.163.20.61", 5679));

ds.send(dp);

buf = null;

}

ds.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

// 服务端接收线程

class ServerRecvThread implements Runnable{

@Override

public void run() {

byte[] buf = new byte[1024];

//接收端的端口需要指定,不然发送端不知道向哪个端口发送数据包

DatagramSocket ds;

try {

ds = new DatagramSocket(5678);

String message = "";

while(true){

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

ds.receive(dp);

message = new String(buf,0,dp.getLength());

System.out.println("接收到Client端的信息为:"+message);

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

java udp聊天 报java.lang.NullPointerException 急~~~~~

String s= new String(ff.str);

str声明的时候是null,用null来实例化就空指针了

在actionPerformed里面给str赋的值

ff没有用这个方法,所以str还应该是null

ff先调用一下actionPerformed方法

str不就有值了嘛!

ff.actionPerformed();

重写的方法为什么不能调用呢,不调用这个方法str就没有值啊在你的程序里

用java的Udp写聊天程序,为什么不能实现一个端口号同时向两个端口号发送消息?不知如何实现,请高手解答?

使用DatagramSocket和DatagramPacket

其中DatagramSocket使用一个发送的端口号

DatagramPacket的参数

DatagramPacket(bytes[] bytes,int bytes[].length,InetAddress ip, int port);里的port就是目标端口

要向两个端口号发送,需要创建两个DatagramPacket,分别填写两个IP地址和端口号,并用DatagramSocket发送。

另外两个端口需要做监听

要注意ip要为局域网可以畅通无阻,广域网可能导致网管阻止

下面是个例子,发两遍即可。

int SERVER_PORT=7000;

String severIp="192.168.1.100";

DatagramSocket clientSocket;

try

{

InetAddress local = InetAddress.getByName(severIp);

DatagramPacket dPacket;

clientSocket = new DatagramSocket;

dPacket = new DatagramPacket("Hello".getBytes("utf-8"),"Hello".getBytes("utf-8").length,

local, SERVER_PORT);

clientSocket.send(dPacket);//这里是发送

byte[] msg = new byte[11246];

DatagramPacket rPacket = new DatagramPacket(msg, msg.length);

clientSocket.receive(rPacket);//这里是接收监听

}

catch (IOException e)

{

e.printStackTrace();

}

clientSocket.close();

java UDP 实现多人聊天时 端口被占用怎么解决?

可以共用一个端口啊,只要在数据包中指明是发给哪个用户的就可以。用同一个端口接收,然后再分发。

javaudp聊天的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java udp 简单聊天室、javaudp聊天的信息别忘了在本站进行查找喔。