Android一个线程内连接多个tcp服务端
2017-12-25 17:54
369 查看
通常情况下我们客户端开启tcp去连接服务器都是一个连接一个线程;这样写代码也是比较easy的
使用就只需要启动这个线程即可,这样就可以一直接收服务器端发送过来的数据了。如果你有多个服务器需要连接的话只需要在外面套一个for循环就可以了;
这样如果连接太多,new 了太多线程这样就很浪费资源了。
使用构造函数,初始化socket tcp连接
编写一个
接下来重点就是在启动线程的地方了,持续接收数据
这样子可以暂时实现,但是如果连接太多的话还是会有问题的;此时你就需要使用到
public class SocketTcpClient implements Runnable { private final String ip; private Socket socket; public SocketTcpClient(String ip) { this.context = context; this.ip = ip; } @Override public void run() { try { socket = new Socket(ip, 5246); OutputStream out = socket.getOutputStream(); out.write("Hello World".getBytes()); while (true) { InputStream in = socket.getInputStream(); byte[] buff = new byte[1024]; int length = in.read(buff); //收到的数据 String data = new String(buff, 0, length); } } catch (Exception e) { e.printStackTrace(); } }
使用就只需要启动这个线程即可,这样就可以一直接收服务器端发送过来的数据了。如果你有多个服务器需要连接的话只需要在外面套一个for循环就可以了;
这样如果连接太多,new 了太多线程这样就很浪费资源了。
new Thread(new SocketTcpClient("192.168.0.252")).start();
现在就回到我们这篇文章需要讲的一个线程连接多个tcp,只需要对客户端修改下即可
public class SocketTcpClient { private Socket socket; private byte[] buff = new byte[1024]; SocketTcpClient(String ip, int port) { try { //首先创建 tcp 连接 socket = new Socket(ip, port); OutputStream out = socket.getOutputStream(); out.write("Hello World".getBytes()); } catch (IOException e) { e.printStackTrace(); } } /** * 循环接数据 */ public void run() { try { InputStream in = socket.getInputStream(); int length = in.read(buff); String data = new String(buff, 0, length); System.out.println(data.replace("\n", "")); } catch (Exception e) { e.printStackTrace(); } } }
使用构造函数,初始化socket tcp连接
编写一个
run()函数,获取服务端发送过来的数据
接下来重点就是在启动线程的地方了,持续接收数据
使用一个线程启动多个tcp客户端
public class Test { public static int port1 = 8271; public static int port2 = 8272; public static int port3 = 8273; public static List<SocketTcpClient> clients = new ArrayList<>(); public static void main(String[] args) { //模拟三台服务器 new Thread(new SocketTcpServer(port1)).start(); new Thread(new SocketTcpServer(port2)).start(); new Thread(new SocketTcpServer(port3)).start(); //客户端开启一个线程 连接三个tcp服务端 new Thread(() -> { //开启三个客户端 建立三个tcp连接 clients.add(new SocketTcpClient("127.0.0.1", port1)); clients.add(new SocketTcpClient("127.0.0.1", port2)); clients.add(new SocketTcpClient("127.0.0.1", port3)); while (true) { for (SocketTcpClient client : clients) { client.run(); } } }).start(); } }
这样子可以暂时实现,但是如果连接太多的话还是会有问题的;此时你就需要使用到java non-blocking IO
(NIO)了 。
Demo下载
相关文章推荐
- Android一个线程内连接多个tcp服务端
- TCP服务器设计范式 - 每个客户连接对应一个线程
- (MFC实现)TCP服务器设计 - 每个客户连接对应一个线程
- TCP中多个客户端一个服务端通信(长连接)
- TCP服务器设计范式 - 每个客户连接对应一个线程
- 基于Socket的TCP长连接(服务端Java+客户端Android),Service配合AIDL实现
- 【socket编程】 一个简单的基于TCP连接的客户端、服务端用例
- Android Socket 聊天工具(一个服务端实现多个客户端间通信)
- serverSpeed是一个android手机端到服务器间udp/tcp对比测速软件
- win32汇编实现一个简单的TCP服务端程序(WinSock的简单认知应用)
- 一个解除TCP连接的TIME_WAIT状态限制的简便方法
- TCP连接建立系列 — 服务端接收ACK段(一)
- 一个Windows和Linux下通用的tcp服务端框架
- Android Wifi连接控制、TCP、UDP通信,6.0以上适配
- 【socket编程】一个简单的基于TCP的客户/服务端例子(vs2008)
- 一个解除TCP连接的TIME_WAIT状态限制的简便方法
- Android 基于Socket的长连接实现一个实时推送的功能
- C# socket服务端判断 客户端已经断开连接的一个小办法
- ESP8266与Android通信简单TCP服务端设计
- Android中端并重启一个Thread线程的办法