您的位置:首页 > 移动开发 > Android开发

Android Socket通讯基本用法

2016-06-06 08:49 537 查看
        Socket可以进行长连接通讯,分为客户端和服务端。

      1、客户端

//①定义IP地址及端口号

private
final
String dstAddress_ecg =
"192.168.1.107";
private
final int

dstPort = 8001;

 

//②打开socket

privateSocket
mSocket;
private OutputStream
mOutputStream;

//连接socket时,不能直接在UI主线程中,不然会包:android.os.NetworkOnMainThreadException错误

private
void
initSocket() {
     try {
         mSocket = new Socket(dstAddress_ecg,
dstPort);
         //
         mOutputStream =
mSocket.getOutputStream();
    }
    catch (UnknownHostException e) {
        e.printStackTrace();
        Log.e(TAG,
"网络异常");
    }
    catch (IOException e) {
        e.printStackTrace();
         Log.e(TAG,
"网络异常");
    }
}

 

//③向服务端发送数据

//注意事项:在使用OutputStream.write()后,需要在写入“\r\n”,不然,服务端不会直接得到写入的数据。

private
void
sendData2Server(final
byte
[] datas) {
new Thread() {
         public
void
run() {
try {
                 if(mSocket ==
null ||
mSocket.isClosed()) {
                        initSocket();
                   }
                   mOutputStream.write(datas);
                      //发送完一条数据后,需要再写入“\r\n”,否则可能服务端不能实时收到数据。
                   mOutputStream.write("\r\n".getBytes());
                
                   mOutputStream.flush();
            }
            catch (IOException e) {
                e.printStackTrace();
                Log.e(TAG,
"e=" + e);                 
                closeScoket();
            }
         };
     }.start();
}

 

//④关闭Socket连接

private
void
closeScoket() {
try {
         if(mOutputStream !=
null) {
            mOutputStream.close();
         }
    }
    catch (IOException e1) {
        e1.printStackTrace();
    }
     finally {
         mOutputStream =
null
;
     }
     //
     try {
         if(mSocket !=
null) {
            mSocket.close();
         }
    }
    catch (IOException e1) {
        e1.printStackTrace();
    }
finally {
         mSocket = null;
     }
}

        2、服务端

public
class
SocketService {
     private
static final
int
SOCKET_PORT = 8001;
     public
static
ArrayList<Socket> socketList =
new ArrayList<Socket>();
 
     ServerSocket serverSocket =
null;
 
     private
void
openSocket() {     
         new Thread() {
              public
void
run() {
                   try {
                                //打开socket监听端口
                       serverSocket =
new ServerSocket(SOCKET_PORT);                   
//
                       while (true) {
                            //
每当接收到客户端的Socket请求,服务器端也相应的创建一个Socket
                            Socket socket =
serverSocket.accept();
                            socketList.add(socket);
                            //
                            new Thread(new ServerThread(socket)).start();
                       }
                   }
                   catch (IOException e) {
                       e.printStackTrace();
                       System.out.println(e);
                       return;
                   }
              };
         }.start();
     }
     class ServerThread
implements Runnable {
         private Socket
socket = null;
         private BufferedReader
bufferedReader = null;
 
         public ServerThread(Socket socket)
throws IOException {
              this.socket = socket;
              bufferedReader =
new BufferedReader(new InputStreamReader(socket.getInputStream()));    

         }
         @Override
         public
void
run() {
              try {
                   String content = null;              

                   while ((content =
bufferedReader.readLine()) != null) {
                       System.out.println(content);
                   }
              }
              catch (IOException e) {
                   e.printStackTrace();                
                   System.out.println(e);
              }
         }
     }
 
     public
static void
main(String[] args) {
         final SocketService socketService =
new SocketService();
         socketService.openSocket();
     }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: