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
Java 如何从多个客户端接收文件?_Java_Sockets_Network Programming - Fatal编程技术网

Java 如何从多个客户端接收文件?

Java 如何从多个客户端接收文件?,java,sockets,network-programming,Java,Sockets,Network Programming,我创建了一个程序,可以将文件发送到服务器或客户端 我的问题是我有两个客户端,它们都需要向服务器发送一个文件 发生的情况是,服务器只能从1个客户机(首先发送文件的客户机)接收文件 我如何解决这个问题 这是我的密码: 服务器 private void sendFile(File file)throws IOException { Socket socket = null; String host = "127.0.0.1"; String receiver=txtReceiv

我创建了一个程序,可以将文件发送到服务器或客户端

我的问题是我有两个客户端,它们都需要向服务器发送一个文件 发生的情况是,服务器只能从1个客户机(首先发送文件的客户机)接收文件

我如何解决这个问题

这是我的密码:

服务器

private void sendFile(File file)throws IOException
{
    Socket socket = null;
    String host = "127.0.0.1";
    String receiver=txtReceiver.getSelectedItem().toString();
    int port=0;
    if(receiver=="Client1")
    {
        host="127.0.0.2";
        port=4441;
    }
    else if(receiver=="Client2")
    {
        port=4442;
        host="127.0.0.3";
    }
    else if(receiver=="Server")
    {
        port=4440;
        host="127.0.0.1";
    }

    socket = new Socket(host, port);

    //File file = new File("Client.txt");
    // Get the size of the file
    long length = file.length();
    if (length > Integer.MAX_VALUE) {
        System.out.println("File is too large.");
    }
    byte[] bytes = new byte[(int) length];
    FileInputStream fis = new FileInputStream(file);
    BufferedInputStream bis = new BufferedInputStream(fis);
    BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());

    int count;

    while ((count = bis.read(bytes)) > 0) {
        out.write(bytes, 0, count);
    }

    out.flush();
    out.close();
    fis.close();
    bis.close();
    socket.close();
}

public static void main(String args[]) throws IOException {
ServerSocket serverSocket = null;

    try 
    {
        serverSocket = new ServerSocket(4440);
    } catch (IOException ex) 
    {
        System.out.println("Can't setup server on this port number. ");
    }

    Socket socket = null;
    InputStream is = null;
    FileOutputStream fos = null;
    BufferedOutputStream bos = null;
    int bufferSize = 0;

    try
    {
        socket = serverSocket.accept();
    } catch (IOException ex) 
    {
        System.out.println("Can't accept client connection. ");
    }

    try 
    {
        is = socket.getInputStream();
        bufferSize = socket.getReceiveBufferSize();
        System.out.println("Buffer size: " + bufferSize);
    } catch (IOException ex) 
    {
        System.out.println("Can't get socket input stream. ");
    }

    try 
    {
        fos = new FileOutputStream("C:\\Users\\Jake_PC\\Documents\\NetBeansProjects\\OJT2\\ServerReceivables\\file.txt");
        bos = new BufferedOutputStream(fos);

    } catch (FileNotFoundException ex)
    {
        System.out.println("File not found. ");
    }

    byte[] bytes = new byte[bufferSize];

    int count;

    while ((count = is.read(bytes)) > 0)
    {
        bos.write(bytes, 0, count);
    }

    bos.flush();
    bos.close();
    is.close();
    socket.close();
    serverSocket.close();
客户端

public static void main(String args[])throws IOException {
ServerSocket serverSocket = null;

    try 
    {
        serverSocket = new ServerSocket(4441);
    } catch (IOException ex) 
    {
        System.out.println("Can't setup server on this port number. ");
    }

    Socket socket = null;
    InputStream is = null;
    FileOutputStream fos = null;
    BufferedOutputStream bos = null;
    int bufferSize = 0;

    try
    {
        socket = serverSocket.accept();
    } catch (IOException ex) 
    {
        System.out.println("Can't accept client connection. ");
    }

    try 
    {
        is = socket.getInputStream();
        bufferSize = socket.getReceiveBufferSize();
        System.out.println("Buffer size: " + bufferSize);
    } catch (IOException ex) 
    {
        System.out.println("Can't get socket input stream. ");
    }
    //C:\Users\Jake_PC\Documents\NetBeansProjects\OJT2
    try 
    {
        fos = new FileOutputStream("C:\\Users\\Jake_PC\\Documents\\NetBeansProjects\\OJT2\\Client1Receivables\\file.txt");
        bos = new BufferedOutputStream(fos);

    } catch (FileNotFoundException ex)
    {
        System.out.println("File not found. ");
    }

    byte[] bytes = new byte[bufferSize];

    int count;

    while ((count = is.read(bytes)) > 0)
    {
        bos.write(bytes, 0, count);
    }

    bos.flush();
    bos.close();
    is.close();
    socket.close();
    serverSocket.close();
}

private void sendFile(File file)throws IOException
{
    Socket socket = null;
    String host = "127.0.0.1";
    String receiver=txtReceiver.getSelectedItem().toString();
    int port=0;
    if(receiver=="Client1")
    {
        port=4441;
    }
    else if(receiver=="Client2")
    {
        port=4442;
    }
    else if(receiver=="Server")
    {
        port=4440;
    }

    socket = new Socket(host, port);

    //File file = new File("Client.txt");
    // Get the size of the file
    long length = file.length();
    if (length > Integer.MAX_VALUE) {
        System.out.println("File is too large.");
    }
    byte[] bytes = new byte[(int) length];
    FileInputStream fis = new FileInputStream(file);
    BufferedInputStream bis = new BufferedInputStream(fis);
    BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());

    int count;

    while ((count = bis.read(bytes)) > 0) {
        out.write(bytes, 0, count);
    }

    out.flush();
    out.close();
    fis.close();
    bis.close();
    socket.close();
}

您需要启动一个新线程来处理每个接受的套接字。例子不胜枚举。例如,请参阅Java教程中的自定义网络跟踪。

为服务器和客户端使用相同的端口,并在不同的机器上运行两个客户端。为服务器和客户端使用相同的端口?如果是这样的话,我怎么知道谁会收到?为什么你的问题中有标签?我看不到任何与swing相关的内容。哦,对不起,我要把它取下来((:我只是想,因为我在秋千上使用它:DDo服务器和客户端有相同的程序吗?我可以只在一台计算机上尝试吗?是的,确实是。我更新了帖子,发布了我为服务器和客户端制作的所有代码…我想在服务器和客户端之间进行双向通信…我必须做什么如何使其工作?哈哈,多亏了这一点,我有了一个想法,尝试在接收部分做一个while循环:D,它工作了!thx很多:D