要用androID实现点对点通信,可以使用socket完成,使用socket需要知道对方的IP地址以及端口号,这里我省略了服务器端(编写正规的通信软件还是得需要服务器做中转,用服务器得知A的IP地址,然后让A做服务器端,B用A的Ip地址去获取数据),只是展示相关原理,首先看服务器端
package polly.liu;import java.io.BufferedReader;import java.io.IOException;import java.io.inputStreamReader;import java.net.InetAddress;import java.net.NetworkInterface;import java.net.ServerSocket;import java.net.socket;import java.net.socketException;import java.util.Enumeration;import androID.app.Activity;import androID.os.Bundle;import androID.os.Handler;import androID.util.Log;import androID.Widget.TextVIEw;import java.io.BufferedReader;import java.io.IOException;import java.io.inputStreamReader;import java.net.ServerSocket;import java.net.socket;import androID.app.Activity;import androID.os.Bundle;import androID.os.Handler;import androID.os.Message;import androID.Widget.TextVIEw;public class ServerActivity extends Activity { ServerSocket ss = null; String mClIEntMsg = ""; Thread myCommsThread = null; protected static final int MSG_ID = 0x1337; public static final int SERVERPORT = 6000; @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.main); TextVIEw tv = (TextVIEw) findVIEwByID(R.ID.TextVIEw01); tv.setText("nothing from clIEnt yet"); this.myCommsThread = new Thread(new CommsThread()); this.myCommsThread.start(); } @OverrIDe protected voID onStop() { super.onStop(); try { // 确保你退出时要关闭socket连接 ss.close(); } catch (IOException e) { e.printstacktrace(); } } Handler myUpdateHandler = new Handler() { public voID handleMessage(Message msg) { switch (msg.what) { case MSG_ID: TextVIEw tv = (TextVIEw) findVIEwByID(R.ID.TextVIEw01); tv.setText(mClIEntMsg); break; default: break; } super.handleMessage(msg); } }; class CommsThread implements Runnable { public voID run() { Socket s = null; try { ss = new ServerSocket(SERVERPORT ); } catch (IOException e) { e.printstacktrace(); } while (!Thread.currentThread().isInterrupted()) { Message m = new Message(); m.what = MSG_ID; try { if (s == null) s = ss.accept(); BufferedReader input = new BufferedReader(new inputStreamReader(s.getinputStream())); String st = null; st = input.readline(); mClIEntMsg = st; myUpdateHandler.sendMessage(m); } catch (IOException e) { e.printstacktrace(); } } } }}
服务器端和平时在PC上的代码差不多,只不过现在把在PC上的代码转到了手机端,注意耗时间的 *** 作要放在子线程上去做,再来看看客户端代码:
package polly.liu;import java.io.BuffereDWriter;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.InetAddress;import java.net.socket;import java.net.UnkNownHostException;import androID.app.Activity;import androID.os.Bundle;import androID.util.Log;import androID.vIEw.VIEw.OnClickListener;import androID.Widget.button;import androID.Widget.EditText;import androID.Widget.TextVIEw;import androID.vIEw.VIEw;public class ClIEntActivity extends Activity { private button bt; private TextVIEw tv; private Socket socket; private String serverIpAddress = "192.168.1.104"; private static final int REDIRECTED_SERVERPORT = 6000; @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.main); bt = (button) findVIEwByID(R.ID.mybutton); tv = (TextVIEw) findVIEwByID(R.ID.myTextVIEw); try { InetAddress serverAddr = InetAddress.getByname(serverIpAddress); socket = new Socket(serverAddr, REDIRECTED_SERVERPORT); } catch (UnkNownHostException e1) { e1.printstacktrace(); } catch (IOException e1) { e1.printstacktrace(); } bt.setonClickListener(new OnClickListener() { public voID onClick(VIEw v) { try { EditText et = (EditText) findVIEwByID(R.ID.EditText01); String str = et.getText().toString(); PrintWriter out = new PrintWriter(new BuffereDWriter(new OutputStreamWriter(socket.getoutputStream())),true); out.println(str); Log.d("ClIEnt", "ClIEnt sent message"); } catch (UnkNownHostException e) { tv.setText("Error1"); e.printstacktrace(); } catch (IOException e) { tv.setText("Error2"); e.printstacktrace(); } catch (Exception e) { tv.setText("Error3"); e.printstacktrace(); } } }); }}
注意要在manifest中加入权限
<uses-permission androID:name="androID.permission.INTERNET" > </uses-permission> <uses-permission androID:name="androID.permission.ACCESS_NETWORK_STATE" > </uses-permission>总结
IP地址也需要根据情况去改
以上是内存溢出为你收集整理的android使用socket实现简单的点对点通信全部内容,希望文章能够帮你解决android使用socket实现简单的点对点通信所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)