如何用Java编写一个聊天室程序,可以支持单聊和多聊?聊天程序又叫即时通讯系统
分类两部分java代码udp聊天室:客户端和服务端
客户端:用户聊天的界面
服务端:接收消息并转发到指定用户
其中服务端和客户端用tcp或者udp连接java代码udp聊天室,使用socket编程完成通信 。
按着这个思路可以开发出一套聊天程序
客户端常用界面 bs版本的又layim
服务端 openfire或者自己实现
java UDP 实现 多人聊天UDP也可以和TCP那样遍历list然后发送啊
客户端向外面开一个UDP端口接受数据报
然后服务器这边要是有消息要发送就直接发送数据报包就可以java代码udp聊天室了嘛
UDP都不用保持着连接java代码udp聊天室的java代码udp聊天室,比TCP还简单些
另外也可以用组播来实现,搜索下java UDP 组播,你能找到不少实例性java代码udp聊天室的代码,也有聊天室的代码
JAVA UDP聊天程序问题 给100分!public void run() /* 用于被调用的接口run方法 */
{
while (true)
{
try
{
byte[] buf = new byte[1024];/* 接收端程序 , 设置BUF数组长度为1024位 */
DatagramPacket dp = new DatagramPacket(buf, buf.length);/* 创建接收数据报的实例 */
ds.receive(dp);
lst.add("他说:"new String(buf), 0);
} catch (IOException ex)
{
}
}
}
======================
线程的run方法改成上面这样就可以了,原因是因为接收端每次循环都是使用的同一个buf,而buf没有清空,所以导致每次接收都只更新前面一小段信息,后面的信息没有改变 。
Java如何使用UDP协议实现多人聊天?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;
【java代码udp聊天室 java udp网络编程】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();
}
}
}
}
急求一个关于UDP的JAVA实现多人聊天源代码import java.io.InputStream;
import java.io.DataInputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.IOException;
import java.util.Date;
class Server
{
public Server()
{
try
{
ServerSocket s=new ServerSocket(8888);
Socket ss=s.accept();
OutputStream out=ss.getOutputStream();
DataOutputStream dout=new DataOutputStream(out);
InputStream in=ss.getInputStream();
DataInputStream din=new DataInputStream(in);
System.out.print(din.readUTF() "!");
dout.writeUTF("你已经连接到服务器" "\t" "你的地址:" ss.getInetAddress() "\t"
"你的链接端口:" ss.getLocalPort() "\n");
new ReadMessage(din).start();
new SendMessage(dout).start();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
new Server();
}
}
//接受客户端信息
class ReadMessage extends Thread
{
private DataInputStream din;
public ReadMessage(DataInputStream din)
{
this.din=din;
}
public void run()
{
String str;
try
{
while (true)
{
str=din.readUTF();
System.out.println(new Date().toLocaleString() "客户端说:" str);
if (str.equals("bye"))
{
System.out.println("客户端下线!");
break;
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
// 发出服务器信息
class SendMessage extends Thread
{
private DataOutputStream dout;
public SendMessage(DataOutputStream dout)
{
this.dout=dout;
}
public void run()
{
InputStreamReader inr=new InputStreamReader(System.in);
BufferedReader buf=new BufferedReader(inr);
String str;
try
{
while(true)
{
str=buf.readLine();
dout.writeUTF(str);
if (str.equals("bye"))
{
System.out.println("服务器退出!");
System.exit(1);
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
import java.io.InputStream;
import java.io.DataInputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.net.Socket;
import java.io.IOException;
import java.util.Date;
class Client
{
public Client()
{
try
{
Socket s=new Socket("192.168.1.2",8888);
InputStream in=s.getInputStream();
DataInputStream din=new DataInputStream(in);
OutputStream out=s.getOutputStream();
DataOutputStream dout=new DataOutputStream(out);
dout.writeUTF("服务器你好!我是客户端");
System.out.println(din.readUTF());
new Thread(new SenderMessage(dout)).start();
new Thread(new ReaderMessage(din)).start();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
new Client();
}
}
class ReaderMessage implements Runnable
{
private DataInputStream din;
public ReaderMessage(DataInputStream din)
{
this.din=din;
}
public void run()
{
String str;
try
{
while(true)
{
str=din.readUTF();
System.out.println(new Date().toLocaleString() "服务器说:" str);
if (str.equals("bye"))
{
System.out.println("服务器已经关闭,此程序自动退出!");
break;
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
class SenderMessage implements Runnable
{
private DataOutputStream dout;
public SenderMessage(DataOutputStream dout)
{
this.dout=dout;
}
public void run()
{
String str;
InputStreamReader inf=new InputStreamReader(System.in);
BufferedReader buf=new BufferedReader(inf);
try
{
while (true)
{
str=buf.readLine();
dout.writeUTF(str);
if (str.equals("bye"))
{
System.out.println("客户端自己退出!");
System.exit(1);
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
java代码udp聊天室的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于java udp网络编程、java代码udp聊天室的信息别忘了在本站进行查找喔 。
推荐阅读
- 怎么下载手机版机器人助手,机器人怎么下载软件
- chatgpt被踢,chatGpT相关的国内股票
- 为什么u盘插入电脑后电脑会卡,u盘插在电脑上时电脑就变得很卡
- go语言提取json go读取json
- linux命令怎么看丢包,linux查看丢包率命令
- 玩飞行游戏可以开飞机嘛,飞机能玩游戏吗
- 钉钉直播授课教研活动,教师钉钉直播课做法
- vb.net开发三维 vbnet web
- 李大齐是什么电视,李大齐为什么分手