【问题标题】:How to send either String or File through android socket?如何通过android套接字发送字符串或文件?
【发布时间】:2014-08-22 00:24:41
【问题描述】:

我刚刚意识到DataInputStreamDataOutputStream在写读socket 可用于区分即将到来的输入。

检查此代码:

服务器端。 (接收字符串或文件)

Socket bSock = serverSocket.accept();
DataInputStream inp = new DataInputStream(bSock.getInputStream());

int iCode = inp.readInt();

        switch (iCode) {
                case Request.STATE_FILESHARING:
                    byte bp[] = new byte[iCode];

                    FileOutputStream fos = new FileOutputStream("s.pdf");
                    BufferedOutputStream bos = new BufferedOutputStream(fos);
                    int bytesRead = inp.read(bp, 0, bp.length);
                    bos.write(bp, 0, bytesRead);
                    bos.close();
                    break;
                case Request.STATE_CONVERSATION:

                    requestFound = new Request(inp.readUTF());
                    sendToUI(requestFound);
                    break;
        }

客户端。 (发送字符串或文件)

Socket socket = new Socket(myServerAddress, SocketServerPORT);

DataOutputStream out = new DataOutputStream(socket.getOutputStream());

if (isThisFileMode()) {

            File myFile = new File(sLocationFile);
            byte[] mybytearray = new byte[(int) myFile.length()];
            FileInputStream fis = new FileInputStream(myFile);
            BufferedInputStream bis = new BufferedInputStream(fis);
            bis.read(mybytearray, 0, mybytearray.length);

            out.writeInt(Request.STATE_FILESHARING);
            out.write(mybytearray, 0, mybytearray.length);
            out.flush();

} else {

            out.writeInt(Request.STATE_CONVERSATION);
            out.write(obReq.toString().getBytes());
            out.flush();

}

但我最终得到了错误。系统崩溃! 有什么我忘记添加的吗?

【问题讨论】:

  • 你遇到了什么错误?

标签: java android string sockets


【解决方案1】:
  1. 您使用的是readUTF(),但不是writeUTF(). 几乎所有的DataInputStream 和DataOutputStream 方法都是对称的:如果您调用readXXX(),则必须在另一端调用writeXXX()

  2. 您犯了假设read() 填充缓冲区的常见错误。它只约定传输至少一个字节。你必须循环:

    while ((count = in.read(buffer)) > 0)
    {
        out.write(buffer, 0, count);
    }
    
  3. 您需要关闭服务器和客户端的套接字。

【讨论】:

    猜你喜欢
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 2013-09-27
    相关资源
    最近更新 更多