【问题标题】:Send a string between sockets in between bytes在字节之间的套接字之间发送字符串
【发布时间】:2016-07-28 20:19:37
【问题描述】:

我有 2 个套接字连接和发送文件。我想在某个时候向第二个套接字发送信号。我想发送一个字符串“start”,当接收器套接字得到它时,我执行一些操作。下面是接收方和发送方的代码。我究竟做错了什么?接收者永远不会得到“开始”,我确信它被发送了。谢谢

发送方:

byte[] buff = new byte[1024 * 50];    
while (isRunning && (readBytes = data.read(buff, 0, buff.length)) != -1) {
    client.getOutputStream().write(buff, 0, readBytes);
    if(sendStart){
        client.getOutputStream().("start".getBytes("UTF-8"), 0, "start".getBytes("UTF-8").length);
        sendStart = false;
    }
}

接收方:

DataInputStream in = null;
   try {
        in = new DataInputStream(socket.getInputStream());
     } catch (IOException e) {
   }

byte buffer[] = new byte[1024 * 50]; 
while ((len = in.read(buffer)) != -1) {
    String received = new String(buffer, "UTF-8");
    if(received!=null && received.equals("start")){
        Log.d(TAG,"received start");
        //do something
    }
    receivedFile.write(buffer, 0, len);
}

【问题讨论】:

  • 什么是in?有什么错误吗?
  • @njzk2 in 是 DataInputStream (我编辑了问题)。没有错误。收到的字符串是乱码。
  • 你先发送data的内容是为了什么?
  • @njzk2 数据是来自视频的 InputStream。场景是在发送视频时,例如,在某个时刻我想告诉另一个套接字开始播放视频。
  • 但您正在写入相同的输出流。您如何期望您的客户端只接收“开始”命令,而不接收数据?

标签: java android sockets stream


【解决方案1】:

我认为错误可能在这里:

client.getOutputStream().("start".getBytes("UTF-8"), 0, "start".getBytes("UTF-8").length);

如果你看的话,write() 方法不在这一行的任何地方。 另外,我想问一下,您自己处理字符串序列化是否有特殊原因?您可以对字符串使用 PrintWriterScanner 之类的东西,或者对任何类型的对象使用 ObjectOutputStreamObjectInputStream

【讨论】:

    猜你喜欢
    • 2012-12-13
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多