完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在所有的通信中,网络通信是用到的比较多的一种,这一节我们主要是在广州微嵌安卓工业平板上学习是如何进行Tcp通信的。Tcp通信主要分为以下几个部分:建立服务器监听客户端的连接请求、建立客户端向服务器发送连接请求、服务器跟客户端建立连接后双方进行通信。
1、在安卓系统上使用网络需添加相应的权限: 2、获取本机的IP地址: //获取本机IP public static String getIpAddressString() { try { for (Enumeration .getNetworkInterfaces(); enNetI.hasMoreElements(); ) { NetworkInterface netI = enNetI.nextElement(); for (Enumeration .getInetAddresses(); enumIpAddr.hasMoreElements(); ) { InetAddress inetAddress = enumIpAddr.nextElement(); if (inetAddress instanceof Inet4Address && !inetAddress.isLoopbackAddress()) { return inetAddress.getHostAddress(); } } } } catch (SocketException e) { e.printStackTrace(); } return ""; } 3、服务器: //新建服务器,绑定IP跟端口 ServerSocket server = new ServerSocket(port); //创建好服务器开启监听客户端连接的线程 accept_thread = new accept_client(); accept_flag= true; accept_thread.start(); 监听客户端发来的连接请求线程: private class accept_client extends Thread { @Override public void run() { // TODO 自动生成的方法存根 try { while (!isInterrupted()) { if(server.isClosed()){ return; } //server.accept()用于监听客户端发来的请求,该方法是阻塞等待直到有客户端连接 //返回值是一个用于跟客户端通信的Socket实例 c_Socket = server.accept(); //获取连接的客户端的IP跟端口号 InetAddress address = c_Socket.getInetAddress(); String c_point = String.valueOf(c_Socket.getPort()); //在有客户端连接后,启动线程接收客户端发来的数据 new ReadThread().start(); } } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } super.run(); } } 服务器用于不断地接收客户端发来的数据的线程: public class ReadThread extends Thread{ @Override public void run() { ArrayList removeItem = new ArrayList(); if(c_Socket!=null){ //获取c_Socket的InputStream流,用于读取数据 InputStream in = c_Socket.getInputStream(); } byte[] buff = new byte[100]; while (!isInterrupted()) { try{ int cnt = in.read(buff); if (cnt >0) { Log.d("ReceiveData",new String(buff,0,cnt); } }catch(Exception e) { } super.run(); } } 服务器向客户端发送数据: //获取c_Socket的OutputStream流,写入数据发送给客户端 try { OutputStream out = c_Socket.getOutputStream(); //写入数据发送 out.write(data.getBytes()); out.flush(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } //关闭服务器: server.close(); //关闭Socket: c_Socket.close(); 4、客户端:创建Socket实例,向服务器发送连接请求 private class connectToServer extends Thread{ @Override public void run() { try { /*客户端向服务器发送连接请求 *ip:服务器的IP地址 *port:服务器创建时绑定监听的端口号 */ Socket mSocket = new Socket(ip,port); }catch(Exception ee) { ee.printStackTrace(); return; } //判断是否连接成功 if (mSocket.isConnected()) { //获取客户端的连接服务器所使用的端口号 int port = mSocket.getLocalPort(); //启动接收线程读取服务器发来的数据,服务器跟客户端接收数据的线程除了使用的Socket实例不一样外,其它的操作都相同 new ReadThread().start(); } super.run(); } } 客户端向服务器发送数据: //获取mSocket的OutputStream流,写入数据发送给客户端 try { OutputStream out = mSocket.getOutputStream(); //写入数据发送 out.write(data.getBytes()); out.flush(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } 关闭客户端: mSocket.close(); 至此在安卓系统上是使用Tcp通信的最基本的功能就以实现,上述中的服务器可以监听多个客户端的连接请求,并可同时跟多个客户端通信。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
9851 浏览 19 评论
10255 浏览 0 评论
3933 浏览 0 评论
8863 浏览 8 评论
2481 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 06:56 , Processed in 0.578912 second(s), Total 68, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号