【胎教】从0开始的java websocket服务器
2021/4/27 20:25:31
本文主要是介绍【胎教】从0开始的java websocket服务器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
全文在IDEA编译器基础上完成。
此文面向未学习过java各类框架的java初学者
CSDN上绝大多数java的websocket都是采用了spring boot框架
本文未采用spring相关的任何框架,只采用了maven来导入websocket库
参考来源:https://github.com/TooTallNate/Java-WebSocket/tree/master/src/main/example
首先IDEA新建一个java maven项目
在pom.xml文件中导入以下依赖
<dependencies> <dependency> <groupId>org.java-websocket</groupId> <artifactId>Java-WebSocket</artifactId> <version>1.5.1</version> </dependency> </dependencies>
创建ChatServer.java文件
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetSocketAddress; import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.util.Collections; import org.java_websocket.WebSocket; import org.java_websocket.drafts.Draft; import org.java_websocket.drafts.Draft_6455; import org.java_websocket.handshake.ClientHandshake; import org.java_websocket.server.WebSocketServer; public class ChatServer extends WebSocketServer { public ChatServer(int port) throws UnknownHostException { super(new InetSocketAddress(port)); } public ChatServer(InetSocketAddress address) { super(address); } public ChatServer(int port, Draft_6455 draft) { super(new InetSocketAddress(port), Collections.<Draft>singletonList(draft)); } @Override public void onOpen(WebSocket conn, ClientHandshake handshake) {//客户端连接时调用 conn.send("Welcome to the server!"); broadcast("new connection: " + handshake.getResourceDescriptor()); //This method sends a message to all clients connected System.out.println( conn.getRemoteSocketAddress().getAddress().getHostAddress() + " entered the room!"); } @Override public void onClose(WebSocket conn, int code, String reason, boolean remote) {//客户端断开连接时调用 broadcast(conn + " has left the room!"); System.out.println(conn + " has left the room!"); } @Override public void onMessage(WebSocket conn, String message) {//收到客户端发送的消息时调用 broadcast(message); System.out.println(conn + ": " + message); } @Override public void onMessage(WebSocket conn, ByteBuffer message) { broadcast(message.array()); System.out.println(conn + ": " + message); } public static void main(String[] args) throws InterruptedException, IOException { int port = 8887; // 服务器所使用的端口号 try { port = Integer.parseInt(args[0]); } catch (Exception ex) { } ChatServer s = new ChatServer(port); s.start(); System.out.println("ChatServer started on port: " + s.getPort()); BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in)); while (true) { String in = sysin.readLine(); s.broadcast(in); if (in.equals("exit")) { s.stop(1000); break; } } } @Override public void one rror(WebSocket conn, Exception ex) { ex.printStackTrace(); if (conn != null) { // some errors like port binding failed may not be assignable to a specific websocket } } @Override public void onStart() { System.out.println("Server started!"); setConnectionLostTimeout(0); setConnectionLostTimeout(100); } }
这样就简单的创建了一个java webscoket服务器
可以使用http://www.websocket-test.com/测试自己的服务器,或是用一个简单的客户端(html,java都有很多这种简单的客户端)来测试服务器的链接情况。
对于想实现的功能,可以重写其中的对应的方法即可。
另外说下可能发生的错误(面向初学者)
websocket服务器对于本机客户端能连上,外网的无法连接。
可能的原因:
1.IP地址填写错误
InetAddress addr = InetAddress.getLocalHost(); System.out.println("Local HostAddress: "+addr.getHostAddress());
java的获取IP地址方法可能获取到的是192.168的本地IP,需要在cmd中输入ipconfig来查看本机IP。另外 百度到的IP地址是不可靠的!!我之前获取自己的IP一直是百度输入IP,就能查到自己的IP地址。
2.IDEA由于防火墙原因不能联网
这个错误真的很低级,但是就是出现过。我自己写的服务器放别人电脑上,其他人死都连不上服务器,但是本机就能连上,后来发现是他IDEA防火墙设置原因不能连上外网。
3.校园网设置原因
这个看学校的设置,我们学校的校园网如果不是同一个接入点就没办法互相连接。解决方法就是客户端和服务器同时连接手机热点。
这篇关于【胎教】从0开始的java websocket服务器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现