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,"未创建链接"); } } } }