解决方案 »
- J2EE项目 如何强制关机?
- 申明新变量调用一个集合,赋值后为什么改变了原来集合的值?
- 问一个关于Spring的问题,请高手详细解答下。
- getHibernateTemplate().find()传值问题
- Java开源迟到内幕
- 问各位一个问题,jap的javabean不能编译,错误如下
- 输入检测 select multiple="true"
- Hibernate 级联问题 注解实现@OneToMany
- 关于httpClient4.3,实现自动投注功能的问题
- springboot项目打包用的是jar方式,放到linux服务器上传图片操作有毛病,怎么解决啊,大神们
- 有关 axis WebService 发布的问题
- 在Myeclipse中配置好了openfire,还是不能对原代码进行修改。。。
虽然不懂java,但是我写过类似的程序,
既然不能接受完说明缓冲区不够大呗
LZ可以先接收这个 “第1位☞第4位,用4个byte表示此信息的长度...”
然后根据的信息来分配合适空间,C用malloc,不知道java用什么,这样就可以了,最后记得释放
zh这代码肯定是TCP啊
一会加上注释代码不难所以就没加
public void run() {
DataOutputStream dos=null;
DataInputStream dis=null;
try {
dos = getDataOutput(socket);
dis = getDataInput(socket);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
while(true){
try {
String msg = null; msg = this.getData;
//获取命令的长度.
dataLen = intToByte(msg.length());
System.out.println(bytesToInt(dataLen));
System.out.println("dataLen="+msg.length());
//发送开始表示01
dos.write(start);
//发送命令长度
dos.write(dataLen);
//发送正文
dos.write(msg.getBytes());
//发送结束字符00
dos.write(end); System.out.println(msg); byte[] bb = new byte[5];
//读取5个字节,就是01和正文长度...
dis.read(bb);
byte[] bf = new byte[] { bb[1], bb[2], bb[3], bb[4] };
//打印看那看那
for(byte b :bf){
System.out.println(b);
}
//转换成int
System.out.println(bytesToInt(bf));
//缓冲区大小.
int buJin = 1024;
int len = bytesToInt(bf);
String re = "";
//建立缓冲区.
byte[] by = new byte[buJin];
int count= len/buJin;
//循环读取
for(int i = 0 ;i<count;i++){
dis.read(by);
System.out.println(new String(by));
re+=new String(by);
}
//读进最后的剩下的部分.
if(len%1024!=0){
System.out.println("进入与"+len%buJin);
byte[] foo = new byte[len%buJin];
dis.read(foo,0,foo.length);
System.out.println(new String(foo));
re+=new String(foo);
}
System.out.println("asdf"+re.length());
//看看是否是正常数据.
//是的话进行解析发送回来的是XML
if(!(dataNone.equals(re))){
List<Traffic> tList = xmlStrToDB(re);
System.out.println("tList");
}else{
System.out.println("else");
}
} catch (Exception e) {
e.printStackTrace();
}finally{
// try {
// socket.close();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
try {
Thread.sleep(17000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}加上注释的.