android使用socket实现简单的点对点通信

android使用socket实现简单的点对点通信,第1张

概述要用android实现点对点通信,可以使用socket完成,使用socket需要知道对方的IP地址以及端口号,这里我省略了服务器端(编写正规的通信软件还是得需要服务器做中转,用服务器得知A的IP地址,然后让A做服务器端,B用A的Ip地址去获取数据),只是展示相关原理,首先看服务器端packagepolly.

要用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实现简单的点对点通信所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1058144.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存