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
}
}
}
|