如何使serversocket监听许多端口,并使不同的客户端连接到不同的端口

时间:2016-01-20 13:11:48

标签: java android sockets

我有一个服务器客户端应用程序来传输文件,我需要使用套接字从一个服务器连接到许多客户端。我尝试了,并获得了连接但是当与单个连接相比时,当连接到更多客户端时速度正在下降,因此我想到打开更多端口并从多个端口上的服务器连接到不同的客户端

这是我打开serversocket的代码

 try {
    serverSocket = new ServerSocket(SocketServerPORT);
    serverSocket1 = new ServerSocket(SocketServerPORT1);
    while (true) {
     socket = serverSocket.accept();
     FileThread fileThread = new FileThread(socket);
     fileThread.start();
     socket1 = serverSocket1.accept();
     FileTxThread fileTxThread = new FileTxThread(socket1);
     fileTxThread.start();
    }

这是从服务器发送文件的代码

DataOutputStream dos=new DataOutputStream(socket.getOutputStream());
   dos.writeInt(f.size());
   for(File file1:f){
       long length = file1.length();
        dos.writeLong(length);
        String name = file1.getAbsolutePath();
        System.out.println(name);
        dos.writeUTF(name);
       FileInputStream in = new FileInputStream(file1);
       int bs=65508;
       byte[] b= new byte[bs];
       int theByte = 0;
        while((theByte = in.read(b,0,bs)) != -1) dos.write(b,0,theByte);
        in.close();

这是我的客户端代码(我的客户端是android设备)

private class ClntThread extends Thread {
              String dstAddress;
              int dstPort;

              ClntThread(String address, int port) {
               dstAddress = address;
               dstPort = port;
              }

              @Override
              public void run() {
               Socket socket = null;
               try {
                socket = new Socket(dstAddress, dstPort);
                DataInputStream dis = new DataInputStream(socket.getInputStream());
                int filescount=dis.readInt();
                File[] files=new File[filescount];
                for(int i = 0; i < filescount; i++)
                {
                    files[i] = new File(dirpath + "/" + filesname);
                    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(files[i]));
                    int bs=65508;
                    byte[] b=new byte[bs];
                    int j=0;
                    while ((j = dis.read(b, 0, bs))!=-1){
                    bos.write(b, 0, j);
                    }
                   bos.flush();
                   bos.close();
                }

                dis.close();
                socket.close();

这里如何在服务器端打开不同的端口以及如何从客户端连接到服务器,因为我提到客户端的端口号我不知道客户端将如何连接到未知端口????

我是编程新手,所以如果我的方法不对,请给我任何建议

谢谢..

0 个答案:

没有答案