android socket通信,想同时发送byte[]和string,但是只能接收到string

cornicione 2016-04-21 09:22:33
我是安卓初学者,现在编写了一个程序。想同时发送byte[]和string(是同样结构的发送程序),但是在电脑上运行java接收端时,只有string可以接收到,byte[]就没有发送。请大神帮忙看下原因:

//-----------送视频----------------
mReceivedVideoDataCallback = new DJICamera.CameraReceivedVideoDataCallback() {
@Override
public void onResult(byte[] videoBuffer, int size) {
if (null != videoBuffer) {
SendVideoData(videoBuffer); //发送视频
}
}
};
//-----------送数据----------------
try {
mUpdateSystemStateCallback=new DJIFlightControllerDelegate.FlightControllerUpdateSystemStateCallback(){
@Override
public void onResult(DJIFlightControllerDataType.DJIFlightControllerCurrentState
djiFlightControllerCurrentState) {
if (null != djiFlightControllerCurrentState) {
mStringBuffer=new StringBuffer();
mStringBuffer.delete(0, mStringBuffer.length());
mStringBuffer.append("Altitude: ")
.append(djiFlightControllerCurrentState.getAircraftLocation().getAltitude()).append("\n");
mHandler.sendEmptyMessage(CHANGE_TEXT_VIEW_STRING);
}
}
};


private void SendVideoData(final byte[] buffer){
new Thread(new Runnable() {
@Override
public void run() {
while (flag) {
try {
socketByte = new Socket(IP, PORTByte);
if(ByteFlag) {
ByteFlag=false;
isbyte = new ByteArrayInputStream(buffer);
byte buffer[] = new byte[1024];
int temp = 0;
osbyte = socketByte.getOutputStream();
//is.read:从输入流(byte buffer[])中读取一部分放到temp中
while ((temp = isbyte.read(buffer)) != -1) {
//从buffer中第0开始写temp长度
osbyte.write(buffer, 0, temp);
}
osbyte.flush();
osbyte.close();
isbyte.close();
ByteFlag=true;
Thread.sleep(500);
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(InterruptedException e){
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
...全文
370 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cornicione 2016-04-21
  • 打赏
  • 举报
回复
那请问我应该如何改正呢?我是应该把sendvideodata() 放到这里执行还是放到原来的地方?

 protected Handler mHandler = new Handler(new Handler.Callback() {

        @Override
        public boolean handleMessage(Message msg) {
            switch (msg.what) {
                case CHANGE_TEXT_VIEW_STRING :
                    SendData();
                case CHANGE_TEXT_VIEW_BYTE :
                    SendVideoData();
                default:
                    break;
            }
            return false;
        }
    });
tcmakebest 2016-04-21
  • 打赏
  • 举报
回复
不管什么通讯, 数据最终都是byte, 不管是自己转换还是自动处理, 而且 String 还多一个编码选择的问题, 逃不了.
cornicione 2016-04-21
  • 打赏
  • 举报
回复
请问isbyte是一个inputstream,是读到那个buf[1024]里面么?用什么函数读呢?然后再用osbyte发送么? 初学者。。。提问太低级请见谅。。。
哎,真难 2016-04-21
  • 打赏
  • 举报
回复
先以buffer把isbyte读进去,然后发送出去
cornicione 2016-04-21
  • 打赏
  • 举报
回复
@heaimnmn 请问您说的是 isbyte = new ByteArrayInputStream(buffer); 这句么?改为 isbyte = new InputStream(buffer);?
xingzhong128 2016-04-21
  • 打赏
  • 举报
回复
ByteFlag确定执行的时候是true
cornicione 2016-04-21
  • 打赏
  • 举报
回复
确定的~ public boolean ByteFlag = true;
哎,真难 2016-04-21
  • 打赏
  • 举报
回复
byte以inputstream发送

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧