【问题标题】:New socket for client to send file to server客户端向服务器发送文件的新套接字
【发布时间】:2011-08-12 00:34:54
【问题描述】:

我有一个客户端,它向服务器发送文件并将其他值发送到服务器。我设法传输文件,但在我关闭套接字之前它不会打开。所以我在客户端创建了另一个套接字只是为了发送文件,但服务器读取它就好像它是另一个客户端并增加了客户端编号并给了我一个异常说> Socketexception:软件导致连接中止:套接字写入错误。这是客户端的代码,带有一个新的仅用于发送的套接字,任何人都可以帮助我吗?在此先感谢。

try
{
    Socket sendSock=new Socket("localhost", 8080);
    outC.println("AcceptFile,");
    FileInputStream fis = new FileInputStream(p);
    byte[] buffer = new byte[fis.available()];
    fis.read(buffer);
    ObjectOutputStream oos = new ObjectOutputStream(sendSock.getOutputStream()) ;
    oos.writeObject(buffer);
    sendSock.close();
}
catch(Exception c)
{
    System.err.println("exc" + c);
}

【问题讨论】:

    标签: java sockets client-server


    【解决方案1】:

    tl;dr - 不要创建新的套接字。只需包装输出流并将对象发送过来。

    假设 outC 也是到您的服务器的连接,请执行此操作

    outC.println("AcceptFile,");
    FileInputStream fis = new FileInputStream(p);
    byte[] buffer = new byte[fis.available()];
    fis.read(buffer);
    ObjectOutputStream oos = new ObjectOutputStream(originalSocket.getOutputStream());
    oos.writeObject(buffer);
    

    这会将一个对象写入底层流。

    现在在服务器端,你可以这样做

    if(clientMessage.equals("AcceptFile,")) {
        ObjectInputStream ois = new ObjectInputStream(clientSocket.getInputStream());
        byte[] buffer = (byte[])ois.readObject();
        // do what you will with that
    }
    

    【讨论】:

    • @glowcoder 谢谢你的帖子,但我之前用过这段代码,它正确地传输了文件,但文件没有打开,除非我关闭套接字,这是我的问题。
    • @Fatema “文件未打开”是什么意思?您正在通过套接字发送byte[]。我期待您将 byte[] 写入文件并以这种方式使用它(或者直接使用 byte[]。)您能否详细说明“文件不是”的意思打开了吗?”
    • @glowcoder 我的意思是该文件是例如创建的(source.pdf)但是当我尝试在服务器客户端应用程序仍在运行时打开它时,pdf阅读器程序会显示一条消息说不能`t 读取文件。但是当我关闭应用程序并尝试打开文件时,它被正确读取。
    • @Faterna Mohsen 所以你还没有关闭文件。所以关闭它。
    • @Fatema 我同意 EJP。这听起来与字节是否通过它完全无关。刷新并关闭您编写的文件。
    【解决方案2】:

    支持多连接的问题出在服务器端。我不知道您将如何从客户端解决该服务器行为。它不支持一个会话中的多个连接。

    【讨论】:

    • 我只是想到了那个解决方案,因为我发现我需要在写入文件后关闭套接字。
    猜你喜欢
    • 2016-03-03
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2014-02-04
    • 2016-08-31
    相关资源
    最近更新 更多