新手!新手!大家让一让啊,让一让!冒犯了各路大神请见谅,哈哈!
对于新手,再直的路上都会拐几个弯。咬着牙,就是向前走!当你回头,来时的路一马平川(装X有点过了,我也还是个新手尼,直接进入正题了)。
Web似乎跟安卓没有半毛钱关系的,我也是这么想的啊,可是最近写的项目中就是要用WebSocket协议,你说咋怎?一个战队都是新手,哎!只能认了。咬着牙,就是向前走。百度一下网上大神的代码琳琅满目,眼花缭乱。大神级代码当然是有结构,有逻辑,有思想,有层次。现在我也只能瞻仰,学习。我实在写不出来!
下面写个简单的,直接用的!对于新手还是可以学习下,至于大神要有兴趣,就给小弟指点指点错误。
WebSocket协议的Url是以***ws://...***开始的,对协议分不清楚的新手可以自行百度啊,撸上主要功能代码:
首先导入jar包,Java-WebSocket-1.3.1-SNAPSHOT.jar,原生的WeSocket也是OK的,
public class MainActivity extends Activity {
private WebSocketClient webc;
private Draft connDraft=new Draft_17();// 连接协议
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setListener();
}
/**建立长连接*/
private void setListener() {
bt1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
initClient();
} catch (Exception e) {
e.printStackTrace();
}
}
});
/**关闭长连接*/
bt2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
webc.close();
}
});
/**发送消息到服务器*/
bt3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//连接成功后给服务器发送消息
webc.send("hello word");
}
});
}
private void initClient() throws Exception {
//每次重连都要初始化,不然连接报错
webc=new WebSocketClient(new URI("ws://Url"),connDraft) {
@Override
public void onOpen(ServerHandshake arg0) {
//连接成功执行的方法
}
@Override
public void onMessage(String message) {
//服务器推送的数据
//可以发广播,或消息,到你要的地方
}
@Override
public void onError(Exception error) {
//连接服务器异常执行这里
}
@Override
public void onClose(int code,String reason, boolean remote) {
//连接断开执行的方法
}
};
webc.connect();
}
“`
是不是很简单,很简单,当然如果你要更进一步,这远远不够。建议:长连接最好是建立在服务中,这样不容易被干掉。当然还是要根据你的实际需求。这里还有个Bug:在onMessage()接收大点数据时会有收不到的情况,感兴趣的可以研究研究啊,不过对于只收发消息的还是搓搓有余,( 网上也有大神们自己写的java类库,用起来无鸭梨);废话也不多说了,赶紧去验证下吧!