本文目錄一覽:
- 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。當然,消息發送時間間隔限制仍然可以緩解這樣的無腦客戶端的壓力
在客戶端用同樣的方法。由於客戶端可以知道用戶的更多信息。進而可以給客戶更多的限制
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/307232.html