java html5 websocket,java html5 websocket多人聊天和一对一聊天

今天和大家分享一下java和html5的websocket基本操作,网上一堆,我根据我操作过的简化一下,希望能更加的通俗易懂。

功能:多人聊天和 一对一聊天。

先声明一下,websocket什么鬼协议的,自已百度。。。。

直接上源码:

首先是首页,登录用, 这里没有用密码,简单操作,你们要密码自己加。。。

pageEncoding="UTF-8"%>

html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

Insert title here
用户名:

页面效果图:

880ddf296d8c00152cb8d1e42e3caba1.png

点击登录后,后跳转到chat.jsp ,同时chat.jsp 连接到一个自定义的Server中,并保存当前的Server信息到User.java中,chat.jsp和Server.javat和Users.java代码如下

chat.jsp

pageEncoding="UTF-8"%>

html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

Insert title here

var webSocket = null;

var loginName = '';//获取登录账号

$(function(){

if(!window.WebSocket){

alert('你的浏览器不支持WebSocket');

}else{

startConnect();

}

});

function startConnect(){

//记住 是ws开关 是ws开关 是ws开关 ws://IP:端口/项目名/Server.java中的@ServerEndpoint的value

var url = "ws://localhost:8081/TestWebSocket/chat/"+loginName;

webSocket = new WebSocket(url);//一个websocket

webSocket.onerror = function(event) {//websocket的连接失败后执行的方法

onError(event)

};

webSocket.onopen = function(event) {//websocket的连接成功后执行的方法

onOpen(event)

};

webSocket.onmessage = function(event) {//websocket的接收消息时执行的方法

onMessage(event)

};

}

function colseConnect(){//关闭连接

webSocket.close();

window.location.href ='./index.jsp';

/* 跳转登录页 我这里就不清空Users.user中对应的对象 ,

你可以用window.location.href请求到后去删除Users.user的相关对象 然后跳转到index.jsp

用servlet3.0接收请求就行

*/

}

function onMessage(event) {

$("#allMsg").append("

" + event.data + "

");

}

function onOpen(event) {

$("#allMsg").append("

已连接至服务器

");

}

function onError(event) {

$("#allMsg").append("

连接服务器发生错误

");

}

function sendMessage(){

if(webSocket.readyState != 1){//断了或其他原因连不上,就得重新连接一下

startConnect();

}

webSocket.send(loginName+":"+$("#msg").val());//向服务器发送消息

$("#msg").val("");//清空输入框

}

Users.javapackage com.yin.user;

import java.util.HashMap;

import java.util.Map;

import com.yin.action.Server;

//所有用户

public class Users {

//保存用户

public static Map user = new HashMap();

}

Server.javapackage com.yin.action;

import java.io.IOException;

import javax.websocket.OnClose;

import javax.websocket.OnError;

import javax.websocket.OnMessage;

import javax.websocket.OnOpen;

import javax.websocket.Session;

import javax.websocket.server.PathParam;

import javax.websocket.server.ServerEndpoint;

import com.yin.user.Users;

@ServerEndpoint(value = "/chat/{loginName}")

public class Server {//自定义一个服务端  名字随便

private Session session;

/**

* 开始连接websocket

*

* @param session

* @param loginName 当前登录账号

*/

@OnOpen

public void open(Session session, @PathParam("loginName") String loginName) {

this.session = session;

Users.user.put(loginName, this);// 保存当前的对象,用于发送或接收消息

}

/**

* 发送消息

* @param message 发送消息

* @throws IOException

*/

@OnMessage

public void message(String message) throws IOException {

// 发送给全部人

for (Server server : Users.user.values()) {

//全部发送消息

server.session.getBasicRemote().sendText(message);

}

/*

如果是一对一发送消息的话  Users.user中只获取发消息和接收消息的对象 不用获取全部

比如:光头强 发给 熊大

Users.user.get("光头强").session.getBasicRemote().sendText(message);

Users.user.get("熊大").session.getBasicRemote().sendText(message);

*/

}

/**

* 关闭

* @param session

*/

@OnClose

public void close(Session session) {

System.out.println("Close");

}

/**

* 出错

* @param t

* @param session

*/

@OnError

public void error(Throwable t, Session session) {

System.out.println(t.getMessage());

System.out.println("Error");

}

}

代码就这么多,聊天界面如下(三个浏览器三个不同用户登录,有乱码,我就不处理了。。。。不过从乱码中可以看出是3个不同的账号来着。。。)

360浏览器

011419c689d9c170e6de42a7f2c0fd9f.png

谷歌浏览器:

f3d9d97d50ae45967b7e1dc32291f10a.png

火狐浏览器

f08e116fc85a11963af6c5412b482eb0.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值