不好意思哈,UNIX下C语言客户端我不知道,只知道他与我之间定义的协议,他提交一个请求如:[010022345],我根据请求返回一个值如:[010122345 5436542 3232](变长)byte数组,结果他接受到[010122345 5436542 ],而3232就没收到了,服务器处理代码如下:try {
byte[] readBytes,writeBytes;
OutputStream outputToSocket = connection.getOutputStream();
InputStream inputFromSocket = connection.getInputStream();
BufferedInputStream in = new BufferedInputStream(inputFromSocket);
BufferedOutputStream out = new BufferedOutputStream(outputToSocket);
Request request = null;
Response response = null;
readBytes = new byte[9];
in.read(readBytes);//读取请求[010022345]
byte[] answer = buildCode();//得到返回数据[010122345 5436542 3232]
out.write(answer);//写入返回数据
out.flush();
out.close();
in.close();
} catch (Exception e) {
socketListener.getLog().write("error***处理当前连接时出现例外:"+e);
}
finally{
try{
connection.close();
connection = null;
} catch (Exception e){
System.out.println(e)
}
}
byte[] readBytes,writeBytes;
OutputStream outputToSocket = connection.getOutputStream();
InputStream inputFromSocket = connection.getInputStream();
BufferedInputStream in = new BufferedInputStream(inputFromSocket);
BufferedOutputStream out = new BufferedOutputStream(outputToSocket);
Request request = null;
Response response = null;
readBytes = new byte[9];
in.read(readBytes);//读取请求[010022345]
byte[] answer = buildCode();//得到返回数据[010122345 5436542 3232]
out.write(answer);//写入返回数据
out.flush();
out.close();
in.close();
} catch (Exception e) {
socketListener.getLog().write("error***处理当前连接时出现例外:"+e);
}
finally{
try{
connection.close();
connection = null;
} catch (Exception e){
System.out.println(e)
}
}
解决方案 »
- 哪位大侠有没有做过基于spring ws2的webservice啊。急急急急急急急。。急急急。。
- 从网上找了个Telnet到远程主机的程序,调试时能打印出结果,但是运行时就打印不出来?
- SSH问题
- 自己写的OO聊天软件,希望大家一起交流
- ibatis配置问题
- SqlServer 2000 默认值问题
- java转码问题,请教大家了
- JAVA EE真实企业级应用界面,看上去很爽,真想自己做一个
- ASP 能都做到,在WEB中编辑WORD 文档!! JSP 如何实现?
- 急!CMP部署出错!忙了一早上,还没有解决!在线等待!!!立即给分!!!
- [100分]清jFresH_MaN()(AbsolutelyFresh)进接分,其余免进
- [100分2]清jFresH_MaN()(AbsolutelyFresh)进接分,其余免进
如果是的,那可能是通讯中的字符串丢失了
问题可能找到了,但我不知道如何解决,c客户端没有使用流机制,在接收到一个数据包后就认为当前socket通信结束。
我如何才能使我的socket在out.write(answer)时只产生一个数据包啊?
sock.setSendBufferSize来看看,但是应该说是C方面存在问题的。
sock.getSendBufferSize()出来是8k应该没问题,我现在在看是不是:
BufferedOutputStream out = new BufferedOutputStream(outputToSocket);的原因
BufferedOutputStream默认的size是512,我打算换成:
BufferedOutputStream out = new BufferedOutputStream(outputToSocket,8192);
同时请校验2端的编码方式是否一样,但是看起来这个应该没有什么问题,因为你只是用到byte[]。
看看c代码是如何获取数据的,因为c中的0会被认为字符串结束符的。所以最好只要以byte操作比较好。
byte[] answer = buildCode();//得到返回数据[010122345 5436542 3232]
是不是确实如你所说的数据,你那些[xxx xxx xxx]里的x到底是什么进制的值?
其实这个就是你们c-java之间的应用曾协议的问题。如果你传了一个byte[],但是c端以字符串的方式接受当然就不对了,一定要做到encoder/decoder是可逆的。btw,你的32如果是10进制标示的ASCII的话,那可就是“空格”哦。
这里要再次感谢takecare(大厅)、ChDw(米)、zedk928(其实我是一个卧底!) ,:)