Android一个线程内如何连接多个tcp服务端
程序员文章站
2022-06-27 16:54:41
通常情况下我们客户端开启tcp去连接服务器都是一个连接一个线程;这样写代码也是比较easy的
public class SocketTcpClient implement...
通常情况下我们客户端开启tcp去连接服务器都是一个连接一个线程;这样写代码也是比较easy的
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 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)了 。
java non-blocking IO(NIO)了 。
下一篇: 推荐阅读站长帮手网倒闭