要使用socket通信,所以转载了很多这方面的内容,各取所长吧
第一点:别忘了在manifest文件里面加访问网络权限
- <uses-permission android:name="android.permission.INTERNET"></uses-permission>
第二点:启动服务器,进行监听
- new Thread(new SocketServerRun()).start();
- }
- class SocketServerRun implements Runnable {
- @Override
- public void run() {
- try {
- ServerSocket ss = new ServerSocket(Constant.LISTEN_PORT);
- while (true) {
- Socket s = ss.accept();
- br = new BufferedReader(new InputStreamReader(
- s.getInputStream() , "utf-8"));
- String strContent;
- if ((strContent = br.readLine()) != null ) {
- Message message = new Message();
- message.obj = strContent;
- mHandler.sendMessage(message);
- }
- br.close();
- s.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
启动一个线程进行监听,不要在主线程(UI线程)进行网络操作,你知道的,有时候如果网络不好或者其他原因造成5秒的阻塞,那就ANR了。
- ServerSocket ss = new ServerSocket(Constant.LISTEN_PORT);
然后使用ServerSocket的accept()方法,该方法使server端程序一直处于等待状态,直到捕获到一个来自Client端的请求,然后返回用于和改Client通信的Socket对象s。直到server程序关闭,Client和Server端就可以进行读写操作了。在上面的代码中,只进行了写入操作。当然,也可以用以下语句进行写出操作:
- PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream(), "utf-8")),true);
- out.println(str);
这是服务器端,客户端呢,相对来说更简单:
- Socket socket = null;
- String message = mEditText.getText().toString() + "\r\n";
- try
- {
- //创建Socket
- socket = new Socket("192.168.1.16", 8091);
- //向服务器发送消息
- PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
- out.println(message);
- //接收来自服务器的消息
- BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
- String msg = br.readLine();
创建Socket,通过IP地址和端口号对服务器端建立连接。然后进行通信。
第三点:关闭资源
像创建的BufferedReader、PrintWriter、包括socket这些资源,一定要记得关闭。
- //关闭流
- out.close();
- br.close();
- //关闭Socket
- socket.close();