几天前我被问过一次这个问题,但没有解决我的问题所以我再次提出我的问题。在客户端部分,我认为应该没有问题,因为使用串口检查是正常的
以下是客户端的一部分
try {
byte[] buf ={(byte) 0x80,
(byte) 0x70,
(byte) 0x60,
(byte) 0x50,
(byte) 0x40,
(byte) 0x30
};
dataOutputStream.write(buf); //writeBytes(String str)
dataOutputStream.flush();
}catch(Exception obj){
}
问题是SERVER,我确实可以接收数据,但只显示第一组数据,没有办法显示第二组数据。
即使我发送第二组数据,仍然只显示第一组数据
以下是服务器的一部分(修订版!)
private Runnable socket_server = new Runnable(){
public void run(){
handler.post(new Runnable() {
public void run() {
test.setText("Listening...." + getMyIp());
}
});
try{
serverSocket = new ServerSocket(8888);
Socket client = serverSocket.accept();
handler.post(new Runnable() {
public void run() {
test.setText("Connected.");
}
});
try {
DataInputStream in = new DataInputStream(client.getInputStream());
do{
byte[] re = new byte[6];
in.readFully(re);
short tmp[] = {(short) (0xff & re[0]),
(short) (0xff & re[1]),
(short) (0xff & re[2]),
(short) (0xff & re[3]),
(short) (0xff & re[4]),
(short) (0xff & re[5]),};
int ddata0,ddata1,ddata2,ddata3,ddata4,ddata5;
ddata0=tmp[0];
ddata1=tmp[1];
ddata2=tmp[2];
ddata3=tmp[3];
ddata4=tmp[4];
ddata5=tmp[5];
dd0=Integer.toHexString(ddata0);
dd1=Integer.toHexString(ddata1);
dd2=Integer.toHexString(ddata2);
dd3=Integer.toHexString(ddata3);
dd4=Integer.toHexString(ddata4);
dd5=Integer.toHexString(ddata5);
handler.post(new Runnable() {
public void run() {
test2.setText(dd0+dd1+dd2+dd3+dd4+dd5);
}
});
}while(in!=null);
} catch (Exception e) {
handler.post(new Runnable() {
public void run() {
test.setText("error");
}
});
}
}catch(IOException e){
handler.post(new Runnable() {
public void run() {
test.setText("socket failed");
}
});
}
}};
我看到您使用了两次flush。在写入字节之前和之后。你的操作是否有必要尝试让线程休眠一秒钟或2秒钟,这样你就可以获得整个流了。我怀疑字节进程比预期的要慢一点。
dataOutputStream.write(buf);
Thread.sleep(1000);
dataOutputStream.flush();