您的位置:

关于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。当然,消息发送时间间隔限制仍然可以缓解这样的无脑客户端的压力

在客户端用同样的方法。由于客户端可以知道用户的更多信息。进而可以给客户更多的限制