java WebSocket服务端和客户端实现

本文介绍了如何使用Java实现WebSocket服务器和客户端的通信。文章重点在于解决实际操作中可能遇到的问题,包括环境配置(tomcat8.5.12, jdk1.8.0_121, Java-WebSocket-1.3.0.jar)和步骤详解。服务器端通过创建WebSocket类接收并回应客户端消息,客户端则使用HTML进行连接。在部署到Tomcat时,需要注意项目结构和WebSocket路径的对应,以及浏览器的兼容性问题。" 81320946,5717709,C语言深度解剖:20道经典习题解析,"['C语言深度解剖', '编程基础', '指针操作', '数据类型', '内存管理']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近接到老大指示,研究下WebSocket是个神马东东,接到指示后疯狂百度,四天下来把网上的demo试了N次,但没一次成功,还买了一本入门的书,按书上的第一个demo,最后的结果是,tomcat运行正常,但是ws访问一直失败。当然最后找到了原因,我不得不说,网上那些demo其实没错(大部分),只是有些关键点没说明白,不然我也不会瞎折腾四天。

介绍WebSocket的内容我就不说了,网上一大堆,这篇文章主要讲解下,java实现简单的webSocket通信,希望对同样和我一样刚开始学习WebSocket的朋友有点帮助!!!

一、环境:tomcat8.5.12 + jdk1.8.0_121,另外需要依赖一个jar包:Java-WebSocket-1.3.0.jar,eclipse最好用3.6以上,我的是Version: Luna Release (4.4.0),听说3.6及以上版本才支持WebSocket。

二、准备好以上的环境后,开始新建一个Web项目:
[img]http://dl2.iteye.com/upload/attachment/0123/7807/fa322389-b95c-37c7-a78e-d751cb5a8772.png[/img]
1.java编写WebSocket服务端,其实这个类相当简单,只是简单的在接收到客户端消息后告诉客户端接收到的消息,代码如下:
import javax.websocket.OnMessage;
import javax.websocket.server.ServerEndpoint;


@ServerEndpoint("/websocket/demo")//这里是一个类注解,告诉虚拟机该类被注解为一个WebSocket端点
public class MyServer {

@OnMessage //这里是方法注解,在接收到客户端的消息时触发
public String echo(String clientMessage){
return "收到来自客户端的消息:" + clientMessage;
}
}

到此服务器端就完成了。
2.编写客户端,这里用一个html来实现:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>WebSocket Client</title>

<script type="text/javascript" language="javascript">
var websocket;

function init()
{
output = document.getElementById("output");
}

function send()
{
var wsUri = "ws://localhost:8080/WebSocketDemo1/websocket/demo";
writeToScreen("Connecting to : "+ wsUri);
websocket = new WebSocket(wsUri);
websocket.onopen = function(evt)
{
writeToScreen("Connect Success!");
doSend(document.getElementById("textID").value);
};
websocket.onmessage = function(evt)
{
writeToScreen("Received Message: "+ evt.data);
websocket.close();
};
websocket.onerror = function (evt)
{
writeToScreen('<span style="color:red;">ERROR:</span>'+evt.data);
};
}
function doSend(message)
{
websocket.send(message);
writeToScreen("Send Message : "+message);
}

function writeToScreen(message)
{
var pre = document.createElement("p");
pre.style.wordWrap = "break-word";
pre.innerHTML = message;
output.appendChild(pre)
}

window.addEventListener("load", init, false);

</script>
</head>
<body>
<h1>WebSocket Client</h1>

<div style="text-align:left;">
<form action="">
<input onclick="send()" value="Send Message" type="button">
<input id="textID" name="message" value="Hello Web Socket" type="text">
<br>
</form>

</div>
<div id="output"></div>
</body>
</html>

到这里,客户端就完成了。

三、这步也是我在网上看的demo没有描述详细的地方:发布WebSocket服务端程序,将项目直接copy到tomcat的webapps目录下如图:

[img]http://dl2.iteye.com/upload/attachment/0123/7823/548d08dc-a393-3670-96b2-91b6044bb3d6.png[/img]

启动服务,然后访问项目的首页(IE10或以上,谷歌浏览器,具体可搜下哪些浏览器支持):

[img]http://dl2.iteye.com/upload/attachment/0123/7821/6be79bdd-8c42-362f-a33e-bc0be1b624af.png[/img]

[img]http://dl2.iteye.com/upload/attachment/0123/7819/c9d856c3-72cb-3717-8d37-16e776877d92.png[/img]


[color=red]ps:1.在服务器端程序中,注解类的参数:/websocket/demo,这个与在jsp页面中ws地址后的一致,如果服务器端这样写:/demo,则jsp中的uri为:ws://localhost:8080/WebSocketDemo1/demo
2.在tomcat中发布程序时,一定要注意,webapps下项目点进去后一定要能找到WEB-INF这个文件夹,我开始时就是因为eclipse建好项目后直接放到该目录下,但是在建项目时,classes文件保存目录没设置好,一直没成功。[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值