1 通訊IP地址java
注意:IP不能爲虛擬的IPandroid
選取無線網適配器下的IP服務器
數據接收socket
package com.example.administrator.self_soket.soket; import android.os.Handler; import android.util.Log; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; /** * Created by Administrator on 2018/3/28 0028. */ public class Socketchat extends Thread { private static final String TAG=Socketchat.class.getSimpleName(); //與UI交互 private Handler hClient; //中文字節 public String ZH_CN="UTF-8"; //連接對象 private Socket socket; //是否運行 private boolean IsRun; //輸入流操做 private InputStream input; //輸出流操做用於發送消息 public OutputStream ouput; //獲取IP 和端口 private String IpAddress; //端口和IP private int Port; //狀態常量 public static int STATE_READ=7; public static int STATE_WRITE=8; public static int STATE_ERROR=9; public static int STATE_IOFO=10; public Socketchat(Handler hClientui) { this.hClient=hClientui; } public void setIneAddress(String inetAddress) { this.IpAddress=inetAddress; this.IsRun=true; } //設置端口 public void setPort(int port) { this.Port=port; } @Override public void run() { if(socket==null&&IpAddress!=null&& Port>0) { try { Log.i(TAG,"運行線程-----開始連接"); socket=new Socket(IpAddress,Port); if(socket!=null) Log.d("Socket","已鏈接到服務器"); //啓動接收線程 input=socket.getInputStream(); ouput=socket.getOutputStream(); new Receive_Thead(socket).start(); //獲取本地IP Port getAdress(); } catch (IOException io) { } } } //獲取IP 和 Port public void getAdress() { String []strings=new String[2]; strings[0]=socket.getInetAddress().getHostAddress(); strings[1]=socket.getInetAddress().getHostName(); } //接收消息線程 public class Receive_Thead extends Thread{ //監聽對象 private Socket tsocket; public Receive_Thead(Socket msoket) { this.tsocket=msoket; } //在run方法中監聽消息 @Override public void run() { try { while (IsRun) { input=tsocket.getInputStream(); //輸出流是否可用 while (input.available()==0); //等待兩秒 Thread.sleep(2000); final byte [] data=new byte[2048]; final int len=input.read(data); Log.i("ReadData","數據讀取完畢"); hClient.sendMessage(hClient.obtainMessage(STATE_READ,len,-1,data)); } } catch (Exception e) { //輸出錯誤信息 Log.i(TAG,e.getMessage()); SenderError(); } finally { //將soket IO流關閉 try { if (tsocket != null) { tsocket.close(); } if(ouput!=null) { ouput.close(); } if(input!=null) { input.close(); } Log.i(TAG,"關閉連接釋放資源"); } catch (Exception e) { e.printStackTrace(); } } } } //發送錯誤消息 public void SenderError() { hClient.sendMessage(hClient.obtainMessage(STATE_ERROR)); } //發送消息 public void SenderMessage(byte[] msg) { try { if(ouput!=null) { ouput.write(msg); ouput.flush(); hClient.sendMessage(hClient.obtainMessage(STATE_WRITE, -1, -1, msg)); Log.i(TAG + "SenderMessage", "發送數據成功" + msg.toString()); } } catch (Exception e) { SenderError(); Log.i("SenderMessage","發送數據錯誤"+e.getMessage()); } } public void Close() { if(socket!=null) { try { socket.close(); socket=null; IsRun=false; this.stop(); } catch (Exception e) { Log.i(TAG,"未創建鏈接"); } } } }