1、webSocket服务端的配置与代码:
(1)、服务器端工程目录结构:
(2)、web.xml的配置
1
2
3
4
5
6
7
|
<servlet-name>webSocketServlet</servlet-name> <servlet- class >com.cn.controller.WebSocketServletService</servlet- class > </servlet> <servlet-mapping> <servlet-name>webSocketServlet</servlet-name> <url-pattern>/webSocketServlet</url-pattern> </servlet-mapping> |
(3)、服务端代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
public class WebSocketServletService extends WebSocketServlet{ private static final long serialVersionUID
= 1L; private static List<MyMessageInbound>
myMessageInbounds = new ArrayList<WebSocketServletService.MyMessageInbound>(); @SuppressWarnings ( "deprecation" ) @Override protected StreamInbound
createWebSocketInbound(String arg0, HttpServletRequest
arg1) { //
TODO Auto-generated method stub return new MyMessageInbound(); } private class MyMessageInbound extends MessageInbound
{ WsOutbound
myoutbound; /** *
打开连接 */ @Override public void onOpen(WsOutbound
outbound) { try { System.out.println( "Open
Client." ); this .myoutbound
= outbound; myMessageInbounds.add( this ); outbound.writeTextMessage(CharBuffer.wrap( "Hello!" )); } catch (IOException
e) { e.printStackTrace(); } } @Override public void onClose( int status)
{ System.out.println( "Close
Clients." ); myMessageInbounds.remove( this ); } /** *
接收消息 */ @Override public void onTextMessage(CharBuffer
cb) throws IOException
{ System.out.println( "Accept
Message : " +
cb); for (MyMessageInbound
myMessageInbound : myMessageInbounds) { CharBuffer
buffer = CharBuffer.wrap(cb); myMessageInbound.myoutbound.writeTextMessage(buffer); myMessageInbound.myoutbound.flush(); } } @Override public void onBinaryMessage(ByteBuffer
bb) throws IOException
{ } } } |
2、android客户端配置与代码
(1)、导入java-websocket-1.3.0.jar
(2)、客户端代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
public class MainActivity extends Activity
{ @Override protected void onCreate(Bundle
savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); } Handler
handler= new Handler() { @Override public void handleMessage(Message
msg) { //
TODO Auto-generated method stub Toast.makeText(MainActivity. this ,
msg.getData().getString( "info" ),Toast.LENGTH_SHORT).show(); } }; @Override public boolean onCreateOptionsMenu(Menu
menu) { //
Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main,
menu); return true ; } @Override public boolean onOptionsItemSelected(MenuItem
item) { //
Handle action bar item clicks here. The action bar will //
automatically handle clicks on the Home/Up button, so long //
as you specify a parent activity in AndroidManifest.xml. int id
= item.getItemId(); if (id
== R.id.action_settings) { URI
uri= null ; try { uri
= new URI( "ws://localhost/Breed/webSocketServlet" ); } catch (URISyntaxException
e) { //
TODO Auto-generated catch block e.printStackTrace(); } WebSocketWorker
webSocketWorker= new WebSocketWorker(uri, new Draft_17()); try { webSocketWorker.connectBlocking(); //此处如果用webSocketWorker.connect();会出错,需要多注意 } catch (InterruptedException
e) { //
TODO Auto-generated catch block e.printStackTrace(); } webSocketWorker.send( "text" ); return true ; } return super .onOptionsItemSelected(item); } private class WebSocketWorker extends WebSocketClient{ public WebSocketWorker(URI
serverUri, Draft draft) { super (serverUri,
draft); } @Override public void onClose( int arg0,
String arg1, boolean arg2)
{ //
TODO Auto-generated method stub } @Override public void onError(Exception
arg0) { //
TODO Auto-generated method stub } @Override public void onMessage(String
arg0) { //
TODO Auto-generated method stub Bundle
bundle= new Bundle(); bundle.putString( "info" ,arg0); Message
message= new Message(); message.setData(bundle); handler.sendMessage(message); } @Override public void onOpen(ServerHandshake
arg0) { //
TODO Auto-generated method stub } } } |