Socket通信,简单的用两个手机实现TCPIP
来源:互联网 发布:如何编译linux源码 编辑:程序博客网 时间:2024/05/30 05:41
从网上看了一些demo,然后写到自己的项目当中,运行发现有些地方还是不对,当然,肯定是我理解的有问题,我不愿意把锅留给自己,于是研究完了之后写一个最简单的demo,希望大家都能懂。
不多说,进入正题。
一。保证两个手机在同一个wifi网络当中,这是很重要的。
二。一个手机作为android客户端,另一个作为server端
首先来看android端代码:
private int i = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn_send_msg = (Button) findViewById(R.id.btn_send_msg); btn_send_msg.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { i = i + 1; Log.e("tcp_android", "点击事件执行"); new Thread(new Runnable() { @Override public void run() { try { Log.e("tcp_android","Client:Connecting"); //IP地址和端口号(对应服务端),我这的IP是另一个手机的ip地址,后面会介绍怎么看 Socket socket = new Socket("192.168.1.236", 12345); Log.e("tcp_android","socket连接完成"); //发送给服务端的消息 String message = "Message from Android phone " + i; try { Log.e("tcp_android","Client Sending: '" + message + "'"); //第二个参数为True则为自动flush PrintWriter out = new PrintWriter( new BufferedWriter(new OutputStreamWriter( socket.getOutputStream())), true); out.println(message);// out.flush(); } catch (Exception e) { e.printStackTrace(); } finally { //关闭Socket socket.close(); Log.e("tcp_android","Client:Socket closed"); } } catch (UnknownHostException e1) { e1.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } }); }
其实客户端要注意的东西就两个,就是new socket(参数1,参数2)。好多人卡在了这个参数应该怎么写,那么我用两个手机来举例子,客户端这儿第一个参数应该是作为服务端的手机的ip地址,你可以进手机的设置当中查看,至于具体的操作,百度是可以查到的,在这里就不多做介绍了,另一个端口号,你就随便填写吧,12345,12346,12347,只要和服务端的端口号保持一致就行。还有记得,这个通信是耗时操作,要在子线程中执行喔;
下面来看看服务端的代码:
private static final int SERVER_PORT = 12345;private TextView mText_accept_msg;private String mStr = "";private String TAG = "tcp_android";private MyHandler mMyHandler;
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMyHandler = new MyHandler(); mText_accept_msg = (TextView) findViewById(R.id.text_accept_msg); new Thread(new Runnable() { @Override public void run() { try { Log.e("tcp_android","Server: Connecting..."); ServerSocket serverSocket = new ServerSocket(SERVER_PORT); while (true) { //循环监听客户端请求 Socket clientSocket = serverSocket.accept(); Log.e("tcp_android","Server: Receiving..."); try { //获取输入流 BufferedReader in = new BufferedReader( new InputStreamReader(clientSocket.getInputStream())); //获取从客户端发来的信息 mStr = in.readLine(); Log.e("tcp_server","Server: Received: '" + mStr + "'"); Bundle bundle = new Bundle(); bundle.putString("msg", mStr); Message message = new Message(); message.setData(bundle); mMyHandler.sendMessage(message); Log.e(TAG, "handler发送消息" + mStr); } catch (Exception e) { Log.e("tcp_android","Server: Error"); e.printStackTrace(); } finally { clientSocket.close(); Log.e("tcp_android","Server: Close."); } } } catch (Exception e) { Log.e("tcp_android","Server: Error"); e.printStackTrace(); } } }).start();}class MyHandler extends Handler{ public MyHandler() { super(); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); Bundle data = msg.getData(); String string = data.getString("msg"); Log.e(TAG, "handler接收消息:" + string); mText_accept_msg.setText("接收客户端消息:" + string); }}
服务端接收也是得在子线程不断的循环接收,这个只是最简单的demo,讲明原理,至于那些封装思想什么的,就靠自己来弄了,以后肯定是要有线程池管理的,不管是客户端还是服务端,为了看得清楚,我在服务端的xml文件中写了一个textview,不断的设置文字,因为要修改UI,必须在主线程执行,而接收的消息又是在子线程,所以这时候,借助handler来实现,这块就不再多说了,相信都懂,好了,这样就实现了基本的通信,过后,我会把服务器给客户端下发消息的补上。。。
阅读全文
0 0
- Socket通信,简单的用两个手机实现TCPIP
- c++ 用socket实现TCPIP通信
- 两个客户端通信的socket简单实现
- socket通信的简单实现
- Android中两个手机间的Socket通信
- 简单实现Socket通信
- Socket实现简单通信
- socket通信简单实现
- socket通信简单实现。
- Java用socket实现简单的一对一通信
- PHP实现简单的socket通信
- Java实现简单的socket通信
- java实现简单的Socket通信
- C++实现简单的socket通信
- java--实现简单的socket通信
- Java Socket实现简单的即时通信
- 实现TcpIp简单传送
- Linux下两个程序进行socket通信的简单例子
- 【数据库基础】用SQL语言关键字表示关系代数的交 并 差 内连接 外连接操作
- 微信小程序-问题:未找到入口 app.json 文件
- Oracle杀死死锁
- Java实现RC4加密算法、RSA算法、MD5算法
- jquery serializeobject();方法序列化表单的属性,返回字符串。
- Socket通信,简单的用两个手机实现TCPIP
- C++学习笔记(二):内联函数inline
- 人工智能之机器学习算法体系汇总
- 换钱的方法数
- 如何找出数列中符合条件的数对的个数
- 268. Missing Number
- 简单 Shell 脚本随手录
- easyui设置datebox默认当前日期,且只能选择当前日期之前的日期
- mongoose中connect()、createConnection()和connection的区别和作用