当前位置:首页 » 操作系统 » 文字聊天室源码

文字聊天室源码

发布时间: 2025-03-03 00:58:14

A. 求网络聊天室源码,用JSP或Servlet都行

用ajax和jsp写的,可以实现无刷新页面显示聊天记录js/js.js文件varnbsp;obj;varnbsp;getId=document.getElementById;functionnbsp;objXMLHttp(){nbsp;nbsp;nbsp;nbsp;varnbsp;XmlHttpObjnbsp;=nbsp;false;nbsp;nbsp;nbsp;nbsp;if(window.ActiveXObject)nbsp;nbsp;nbsp;nbsp;{nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;XmlHttpObjnbsp;=nbsp;newnbsp;ActiveXObject(“MSXML2.XMLHTTP.3.0“);nbsp;nbsp;nbsp;nbsp;}nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;elsenbsp;ifnbsp;(window.XMLHttpRequest)nbsp;nbsp;nbsp;nbsp;{nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;XmlHttpObjnbsp;=nbsp;newnbsp;XMLHttpRequest();nbsp;nbsp;nbsp;nbsp;}nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;returnnbsp;XmlHttpObj;}functionnbsp;sendMsg(auto){nbsp;obj=objXMLHttp();nbsp;if(!auto)//nbsp;{nbsp;nbsp;varnbsp;myContentnbsp;=nbsp;getId(“myText“).value;nbsp;nbsp;if(myContentnbsp;!=nbsp;““)nbsp;nbsp;{nbsp;nbsp;nbsp;if(obj)nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;{nbsp;nbsp;nbsp;nbsp;obj.onreadystatechangenbsp;=nbsp;addChat;nbsp;nbsp;nbsp;nbsp;obj.open(“POST“,“do.jsp“,nbsp;true);nbsp;nbsp;nbsp;nbsp;obj.setRequestHeader(“Content-Type“,“application/x-www-form-urlencoded;“);nbsp;nbsp;nbsp;nbsp;nbsp;obj.send(“myContent=“nbsp;+nbsp;myContent);nbsp;nbsp;nbsp;nbsp;getId(“myText“).value=““;nbsp;nbsp;nbsp;nbsp;getId(“myText“).focus();nbsp;nbsp;nbsp;nbsp;Scroll();nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;}nbsp;nbsp;}nbsp;nbsp;elsenbsp;nbsp;{nbsp;nbsp;nbsp;alert(“nbsp;(*^__^*)nbsp;你不告诉我们,我们怎么知道你们保持沉默呢“);nbsp;nbsp;nbsp;getId(“myText“).value=“保持沉默“;nbsp;nbsp;nbsp;getId(“myText“).focus();nbsp;nbsp;}nbsp;}nbsp;else//nbsp;{nbsp;nbsp;if(obj)nbsp;nbsp;{nbsp;nbsp;nbsp;obj.onreadystatechangenbsp;=nbsp;addChat;nbsp;nbsp;nbsp;obj.open(“POST“,“do.jsp“,nbsp;true);nbsp;nbsp;nbsp;obj.setRequestHeader(“Content-Type“,“application/x-www-form-urlencoded;“);nbsp;nbsp;nbsp;nbsp;obj.send(null);nbsp;nbsp;nbsp;Scroll();nbsp;nbsp;}nbsp;}}functionnbsp;addChat()//添加聊天记录{nbsp;varnbsp;docnbsp;=nbsp;““;nbsp;if(obj.readyStatenbsp;==nbsp;4nbsp;amp;amp;nbsp;obj.statusnbsp;==nbsp;200)nbsp;{nbsp;nbsp;doc=obj.responseText;nbsp;nbsp;if(docnbsp;!=nbsp;““)nbsp;nbsp;{nbsp;nbsp;nbsp;getId(“says“).value=doc;nbsp;nbsp;}nbsp;}}functionnbsp;getChatContent(){nbsp;tnbsp;=nbsp;setInterval(‘sendMsg(true)‘,800);}functionnbsp;quickSend(){nbsp;nbsp;if(getId(“sendType“).value==“ctrlEnter“)nbsp;{nbsp;nbsp;if(window.event.ctrlKeyamp;amp;window.event.keyCode==13)nbsp;nbsp;{nbsp;nbsp;nbsp;sendMsg(false);nbsp;nbsp;}nbsp;}nbsp;elsenbsp;if(getId(“sendType“).value==“enterKey“)nbsp;{nbsp;nbsp;if(window.event.keyCode==13)nbsp;nbsp;{nbsp;nbsp;nbsp;sendMsg(false);nbsp;nbsp;}nbsp;}}functionnbsp;loginConfirm(){nbsp;if(window.event.keyCode==13)nbsp;{nbsp;nbsp;checkUser();nbsp;}}functionnbsp;checkUser(){nbsp;if(getId(“userName“).value==nullnbsp;||nbsp;getId(“userName“).value=

B. go语言聊天室实现(二)gorilla/websocket中的聊天室示例

我们可以看到 gorilla/websocket中的examples中有一个聊天室的demo。

我们进入该项目可以看到里面有这样的一些内容

按照官方的运行方式来运行这个项目

在浏览器中打开8080端口,可以看到该项目可以被成功运行了。

就是这样一个简单的demo。

然后我们去看一下它的具体实现。
在这个项目中首先定义了一个hub的结构体:

这个结构体中,clients代表所有已经注册的用户,broadcast管道会存储客户端发送来的信息。 register是一个*Client类型的管道,用于存储新注册的用户,unregister管道反之。

我们打开main.go,main函数的源码为:

在这里首先会新开一个goroutine,去跑hub的run方法,run方法中一个死循环,不停地去轮询hub中的内容

如果取到了新用户,就加入到clients中,如果取到了信息,就循环所有的client,将信息写到client.send中。
我们看到在请求路径为根的时候,它会请求一个函数,而这个函数就是将home.html发送到客户端。
而在请求路径为“/ws”的时候,他会执行一个serveWS的函数。

每当一个新的用户进来之后,首先将连接升级为长连接,然后将当前的client写到register中,由hub.run函数去做处理。然后开启两个goroutine,一个去读client中发送来的数据,一个将数据写入到所有的client中,去发送给用户。
这就是整个聊天室的实现原理。

C. 速求用java语言写聊天室的源代码

【ClientSocketDemo.java 客户端Java源代码】

import java.net.*;
import java.io.*;
public class ClientSocketDemo
{
//声明客户端Socket对象socket
Socket socket = null;

//声明客户器端数据输入输出流
DataInputStream in;
DataOutputStream out;

//声明字符串数组对象response,用于存储从服务器接收到的信息
String response[];

//执行过程中,没有参数时的构造方法,本地服务器在本地,取默认端口10745
public ClientSocketDemo()
{
try
{
//创建客户端socket,服务器地址取本地,端口号为10745
socket = new Socket("localhost",10745);

//创建客户端数据输入输出流,用于对服务器端发送或接收数据
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());

//获取客户端地址及端口号
String ip = String.valueOf(socket.getLocalAddress());
String port = String.valueOf(socket.getLocalPort());

//向服务器发送数据
out.writeUTF("Hello Server.This connection is from client.");
out.writeUTF(ip);
out.writeUTF(port);

//从服务器接收数据
response = new String[3];
for (int i = 0; i < response.length; i++)
{
response[i] = in.readUTF();
System.out.println(response[i]);
}
}
catch(UnknownHostException e){e.printStackTrace();}
catch(IOException e){e.printStackTrace();}
}

//执行过程中,有一个参数时的构造方法,参数指定服务器地址,取默认端口10745
public ClientSocketDemo(String hostname)
{
try
{
//创建客户端socket,hostname参数指定服务器地址,端口号为10745
socket = new Socket(hostname,10745);
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());

String ip = String.valueOf(socket.getLocalAddress());
String port = String.valueOf(socket.getLocalPort());

out.writeUTF("Hello Server.This connection is from client.");
out.writeUTF(ip);
out.writeUTF(port);

response = new String[3];
for (int i = 0; i < response.length; i++)
{
response[i] = in.readUTF();
System.out.println(response[i]);
}
}
catch(UnknownHostException e){e.printStackTrace();}
catch(IOException e){e.printStackTrace();}
}

//执行过程中,有两个个参数时的构造方法,第一个参数hostname指定服务器地址
//第一个参数serverPort指定服务器端口号
public ClientSocketDemo(String hostname,String serverPort)
{
try
{
socket = new Socket(hostname,Integer.parseInt(serverPort));
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());

String ip = String.valueOf(socket.getLocalAddress());
String port = String.valueOf(socket.getLocalPort());

out.writeUTF("Hello Server.This connection is from client.");
out.writeUTF(ip);
out.writeUTF(port);

response = new String[3];
for (int i = 0; i < response.length; i++)
{
response[i] = in.readUTF();
System.out.println(response[i]);
}
}
catch(UnknownHostException e){e.printStackTrace();}
catch(IOException e){e.printStackTrace();}
}

public static void main(String[] args)
{
String comd[] = args;
if(comd.length == 0)
{
System.out.println("Use localhost(127.0.0.1) and default port");
ClientSocketDemo demo = new ClientSocketDemo();
}
else if(comd.length == 1)
{
System.out.println("Use default port");
ClientSocketDemo demo = new ClientSocketDemo(args[0]);
}
else if(comd.length == 2)
{
System.out.println("Hostname and port are named by user");
ClientSocketDemo demo = new ClientSocketDemo(args[0],args[1]);
}
else System.out.println("ERROR");
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

【ServerSocketDemo.java 服务器端Java源代码】

import java.net.*;
import java.io.*;
public class ServerSocketDemo
{
//声明ServerSocket类对象
ServerSocket serverSocket;

//声明并初始化服务器端监听端口号常量
public static final int PORT = 10745;

//声明服务器端数据输入输出流
DataInputStream in;
DataOutputStream out;

//声明InetAddress类对象ip,用于获取服务器地址及端口号等信息
InetAddress ip = null;

//声明字符串数组对象request,用于存储从客户端发送来的信息
String request[];

public ServerSocketDemo()
{
request = new String[3]; //初始化字符串数组
try
{
//获取本地服务器地址信息
ip = InetAddress.getLocalHost();

//以PORT为服务端口号,创建serverSocket对象以监听该端口上的连接
serverSocket = new ServerSocket(PORT);

//创建Socket类的对象socket,用于保存连接到服务器的客户端socket对象
Socket socket = serverSocket.accept();
System.out.println("This is server:"+String.valueOf(ip)+PORT);

//创建服务器端数据输入输出流,用于对客户端接收或发送数据
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());

//接收客户端发送来的数据信息,并显示
request[0] = in.readUTF();
request[1] = in.readUTF();
request[2] = in.readUTF();
System.out.println("Received messages form client is:");
System.out.println(request[0]);
System.out.println(request[1]);
System.out.println(request[2]);

//向客户端发送数据
out.writeUTF("Hello client!");
out.writeUTF("Your ip is:"+request[1]);
out.writeUTF("Your port is:"+request[2]);
}
catch(IOException e){e.printStackTrace();}
}
public static void main(String[] args)
{
ServerSocketDemo demo = new ServerSocketDemo();
}
}

热点内容
代码块编程 发布:2025-03-03 17:22:06 浏览:327
计算几何c语言描述 发布:2025-03-03 17:07:25 浏览:273
哈佛黑标是什么配置 发布:2025-03-03 16:54:30 浏览:387
武林志怎么改配置 发布:2025-03-03 16:49:53 浏览:12
编程珠玑第二版 发布:2025-03-03 16:24:50 浏览:60
国网统一权限密码是多少 发布:2025-03-03 16:24:07 浏览:130
如何打开通讯录的密码 发布:2025-03-03 15:53:13 浏览:63
c语言中a2 发布:2025-03-03 15:25:42 浏览:556
黄箱算法 发布:2025-03-03 15:20:46 浏览:768
php的ppt 发布:2025-03-03 15:20:42 浏览:43