本文目录一览:
- 1、用JAVA如何实现GUI的聊天室?只需实现基本的聊天室功能即可。希望给出服务器源代码和客户端源代码。
- 2、用java语言实行一个UDP聊天室 多客户 无图形用户界面
- 3、java聊天室怎么保存聊天记录一定的时间?
- 4、JAVA 聊天室怎么实现“同样的内容短时间内不可发送多次”
用JAVA如何实现GUI的聊天室?只需实现基本的聊天室功能即可。希望给出服务器源代码和客户端源代码。
转自 Ian Darwin's Java Cookbook,
用的是Socket通信 + AWT实现GUI。
Code比较长,这里贴不下,可以去下面URL直接下载。
定义常量
Server端
Client端
用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聊天室怎么保存聊天记录一定的时间?
将聊天记录放在一个容器里 如ArrayList,如果聊天内容超过了100行。删除前50行,基本上都是这么做的。不懂请追问。
JAVA 聊天室怎么实现“同样的内容短时间内不可发送多次”
可以在客户端和服务端同时进行判断。
服务端判断方法是缓存上一次的消息内容和说话时间。下次接受到客户端说话时,进行内容对比和时间对比。这样的话可以阻止掉类似这样的客户端消息:A,A,A,A
考虑到服务端压力,这里只缓存了上次的一个消息,没有缓存多个。如果客户端发送这样的消息就无能为力了:A,B,A,B,A。当然,消息发送时间间隔限制仍然可以缓解这样的无脑客户端的压力
在客户端用同样的方法。由于客户端可以知道用户的更多信息。进而可以给客户更多的限制