繁体   English   中英

无法让我的Java服务器接受来自客户端的文件传输

[英]Can't get my java server to accept a file transfer from my client

我有两个文件:一个聊天服务器和一个聊天客户端。 聊天客户端应该说要将文件上传到服务器。 然后上传。 但是,现在,所有消息都已正确发送/接收,但是当我尝试进行文件传输时,我得到的唯一东西就是一个0字节的文件(这是我在服务器类内部指定的路径) 。

chatclient类的损坏部分:

/**
 * Sends a broadcast to the server
 */
public static void broadcast() throws IOException {

    if (UserInput.getText() == "/upload") {

        File myFile = new File (FILE_TO_SEND);
        byte [] mybytearray  = new byte [(int)myFile.length()];
        fis = new FileInputStream(myFile);
        bis = new BufferedInputStream(fis);
        bis.read(mybytearray,0,mybytearray.length);
        os = Socket.getOutputStream();
        System.out.println("Sending " + FILE_TO_SEND + "(" + mybytearray.length + " bytes)");
        os.write(mybytearray,0,mybytearray.length);
        os.flush();
        System.out.println("Done.");
    }

    System.out.println("" + UserInput.getText());

    outputStream.println(UserInput.getText());
    outputStream.flush();
}

服务器类的损坏部分:

if (input.contains("/upload")) {
    byte [] mybytearray  = new byte [FILE_SIZE];
    InputStream is = csocket.getInputStream();
    fos = new FileOutputStream(FILE_TO_RECEIVED);
    bos = new BufferedOutputStream(fos);
    bytesRead = is.read(mybytearray,0,mybytearray.length);
    current = bytesRead;

    do {
        bytesRead =  is.read(mybytearray, current, (mybytearray.length-current));
        if (bytesRead >= 0) current += bytesRead;
    } 
    while(bytesRead > -1);

    bos.write(mybytearray, 0 , current);
    bos.flush();
    System.out.println("File " + FILE_TO_RECEIVED + " downloaded (" + current + " bytes read)");
}

您的复制循环是胡说八道。 在Java中复制流的规范方法如下:

while ((count = in.read(buffer)) > 0)
{
    out.write(buffer, 0, count);
}

其中“ count”是一个整数,“ buffer”是一个length> 0的byte []数组。我通常使用8192。

您应该尝试使用try-catch块将损坏的代码包围起来,并从堆栈中打印出错误消息。 这样可以使您更好地了解什么不起作用。 我知道,这不是解决方案,但是如果您知道确切的问题,找到解决方案会更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM