Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 如何在java中保持连接套接字_Sockets - Fatal编程技术网

Sockets 如何在java中保持连接套接字

Sockets 如何在java中保持连接套接字,sockets,Sockets,我用套接字编程了多连接(客户机-服务器) 连接多台服务器时, 文件不会被传输,但客户端会显示一条错误消息。 我应该在你的客户端中使用线程吗 client.java import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostExc

我用套接字编程了多连接(客户机-服务器)

连接多台服务器时, 文件不会被传输,但客户端会显示一条错误消息。 我应该在你的客户端中使用线程吗

client.java

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class client {
    public static void main(String[] args) {

        try {
            while (true) {
                Socket sock = new Socket("192.168.0.77", 9999);
                // Socket sock = new Socket("127.0.0.1", 9999);
                // Socket sock = new Socket("127.0.0.1", 9999);
                System.out.println("connection");
                Scanner scan = new Scanner(System.in);
                System.out.print("file name : ");

                String fileName = scan.next();
                File f = new File(fileName);

                DataOutputStream dos = new DataOutputStream(sock.getOutputStream());

                dos.writeUTF(f.getName());
                dos.flush();
                byte b[] = new byte[1024];
                int n = 0;

                FileInputStream fis = new FileInputStream(fileName);
                long fileSize = 0;

                while ((n = fis.read(b)) != -1) {
                    dos.write(b, 0, n);
                    fileSize += n;
                }
                System.out.println("Transfer completed");
                dos.close();
                fis.close();

                sock.close();
            }

        } catch (UnknownHostException ue) {
            //System.out.println(ue.getMessage());
        } catch (IOException ie) {
            System.out.println(ie.getMessage());

        }
    }

}
server.java

import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class server {
   public static void main(String[] args) {
      ServerSocket server = null;
      // final int Server_port = 9999;

      DataInputStream dis = null;
      String fileName = null;
      FileOutputStream fos = null;

      try {
         /*
          * server = new ServerSocket(); String localHostAddress =
          * InetAddress.getLocalHost().getHostAddress(); server.bind(new
          * InetSocketAddress(localHostAddress, Server_port));
          * System.out.println("[server] binding \naddress : " + localHostAddress +
          * ", port : " + Server_port);
          */

         /*
          * InetSocketAddress remoteSocketAddress = (InetSocketAddress)
          * socket.getRemoteSocketAddress(); String remoteHostName =
          * remoteSocketAddress.getAddress().getHostAddress(); int remoteHostPort =
          * remoteSocketAddress.getPort();
          * System.out.println("[server] connected! \nconnected socket address:" +
          * remoteHostName + ", port:" + remoteHostPort);
          */

         while (true) {
            server = new ServerSocket(9999);
            AcceptThread acceptThread = new AcceptThread (server);



            System.out.println("wait");
            Socket sock = server.accept();
            System.out.println("Client accept");

            new Thread(acceptThread).start();

            dis = new DataInputStream(sock.getInputStream());

            // if (dis.available() > 0) {
            fileName = dis.readUTF();
            fos = new FileOutputStream(fileName);
            byte[] b = new byte[1024];
            int n = 0;
            long fileSize = 0;

            while ((n = dis.read(b)) != -1) {
               fos.write(b, 0, n);
               fileSize += n;
            }
            System.out.println("accepted");

            fos.close();
            dis.close();


            sock.close();
            server.close();

         }
         // }
      } catch (IOException ie) {
         System.out.println(ie.getMessage());
      }

   }

}
接受线程类

import java.net.*;

public class AcceptThread extends Thread {

   ServerSocket server;
   Socket sock;

   public AcceptThread(ServerSocket server) {
      this.server = server;
   }

   @Override
   public void run() {
      while (true) {
         try {
            sock = server.accept();
            System.out.println("connected client" + sock);
         } catch (Exception e) {
         }
      }

   }

}
它给了我一个客户端错误

Connection reset by peer: socket write error
我想知道如何将多客户端连接到服务器


你能提供一个链接或一些提示/例子吗

您使用
DataOutputStream
发送名称,但是
file.getName()
是字符串!转换为字节数组