Tomcat7支持WebSocket
今天研究了一下tomcat7的websocket,首先我們看看chrome瀏覽器的支持的js代碼,html5支持websocket
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <script type="text/javascript"> var ws = null; function startServer() { var url = "ws://192.168.1.109/websocket/helloWorld"; if ('WebSocket' in window) { ws = new WebSocket(url); } else if ('MozWebSocket' in window) { ws = new MozWebSocket(url); } else { alert('瀏覽器不支持'); return; } ws.onopen = function() { //alert('Opened!'); }; // 收到服務器發送的文本消息, event.data表示文本內容 ws.onmessage = function(event) { alert('Receive message: ' + event.data); }; ws.onclose = function() { // alert('Closed!'); } } //發送信息 function sendMessage(){ var textMessage=document.getElementById("textMessage").value; if(ws!=null&&textMessage!=""){ ws.send(textMessage); } } </script> <body onload="startServer()"> <input type="text" id="textMessage" size="20" /> <input type="button" onclick="sendMessage()" value="Send"> </body> </html>
上面主要是JS的代碼,主要是瀏覽器發送socket給tomcat7,和結束tomcat返回的信息
在web項目中,我們要建一個servlet
package com.auscend.servlet; import java.io.DataInputStream; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.nio.CharBuffer; import org.apache.catalina.websocket.MessageInbound; import org.apache.catalina.websocket.StreamInbound; import org.apache.catalina.websocket.WebSocketServlet; public class HelloWorldWebSocketServlet extends WebSocketServlet{ protected StreamInbound createWebSocketInbound(String subProtocol){ return new MessageInbound() { @Override protected void onBinaryMessage(ByteBuffer arg0) throws IOException { // TODO Auto-generated method stub } @Override protected void onTextMessage(CharBuffer message) throws IOException { // TODO Auto-generated method stub System.out.println("onText--->"+message.toString()); Socket socket; String msg = ""; try { //向服務器利用Socket發送信息 socket = new Socket("192.168.1.109", 5000); // socket = new Socket("127.0.0.1",5000); PrintWriter output = new PrintWriter(socket.getOutputStream()); output.write(message.toString()); output.flush(); //這里是接收到Server的信息 DataInputStream input = new DataInputStream(socket.getInputStream()); byte[] b = new byte[1024]; input.read(b); //Server返回的信息 msg = new String(b).trim(); output.close(); input.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //往瀏覽器發送信息 CharBuffer cb = CharBuffer.wrap(new StringBuilder(msg)); getWsOutbound().writeTextMessage(cb); }};}}
下面是Server,相當于中央機
public class Server { /** 端口號 */ public static final int PORT = 5000; public static void main(String[] args) { System.out.println("服務器...\n"); Server ser = new Server(); ser.sock(); } public void sock() { try { ServerSocket server = new ServerSocket(PORT); while (true) { // 一旦有堵塞, 則表示服務器與客戶端獲得了連接 Socket client = server.accept(); // 處理這次連接 new PServer(client); } } catch (Exception e) { System.out.println("服務器異常: " + e.getMessage()); } } private class PServer implements Runnable { private Socket socket; public PServer(Socket sock) { socket = sock; new Thread(this).start(); } public void run() { System.out.println("一個客戶端連接ip:" + socket.getInetAddress()); try { // 讀取客戶端數據 DataInputStream input = new DataInputStream( socket.getInputStream()); // 向客戶端發送數據 DataOutputStream out = new DataOutputStream( socket.getOutputStream()); // 讀取客戶端數據 // System.out.println("客戶端發過來的內容: " + input.readUTF()); byte[] bt = new byte[1024]; int leng = input.read(bt); System.out.println(new String(bt, 0, leng)); // 發送鍵盤輸入的一行 // String s = new BufferedReader(new // InputStreamReader(System.in)).readLine(); String s = "server d shu ru"; out.write(s.getBytes()); out.flush(); input.close(); out.close(); socket.close(); } catch (Exception e) { System.out.println("服務器 run 異常: " + e.getMessage()); } } } }
這里的tomcat是使用的tomcat7.0.28,其他版本方法有點改動,好像是加了一個request的參數。
來自:http://blog.csdn.net/a79412906/article/details/9393515
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!