SOCKET的奇怪问题,回答者有分,急! 可能是socket stream自己缓冲管理的问题, 用flush 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DataOutputStream output = new DataOutputStream(socket.getOutputStream());output.write(sendByte);output.flush();//楼主试一试.帮你顶一下! 我的服务端是vc写的,客户端是JAVA写的。不会是这种原因造成的吧。 to : CharmingChen(charming) remove socket.setSoTimeout(150);因为有时对方不存在的话就不返回数据回来,但对方存在肯定有正确数据传过来。 在下面两条语句后,DataOutputStream output = new DataOutputStream(socket.getOutputStream());output.write(sendByte);用了output.flush();依然没有解决,是不是要关闭output啊。 try { socket = new Socket(InetAddress.getByName(hostAddress), iCommPort); socket.setSoTimeout(150); DataOutputStream output = new DataOutputStream(socket.getOutputStream()); output.write(sendByte); output.flush(); DataInputStream input = new DataInputStream(socket.getInputStream()); input.read(devReturnData);} catch (SocketException se) { System.out.println("Server not starting!"); ifLink = true;} catch (IOException ioe) {} finally { try { if (socket != null) { socket.close(); } } catch (IOException ioe) {}} 注意到,“我的服务端是vc写的,客户端是JAVA写的。不会是这种原因造成的吧。"问一下,Can your Client be connect to the server? 实施这段代码!try { socket = new Socket(InetAddress.getByName(hostAddress), iCommPort); System.out.println("Connection to Server accepted:"+socket); PrintWriter output =new PrintWriter( new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); socket.setSoTimeout(150); //DataOutputStream output = new DataOutputStream(socket.getOutputStream()); output.write(sendByte); output.flush(); //DataInputStream input = new DataInputStream(socket.getInputStream()); BufferedReader input= new BufferedReader(new InputStreamReader(socket.getInputStream())); System.out.println(input.readLine()); input.read(devReturnData);} catch (SocketException se) { System.out.println("Server not starting!"); ifLink = true;} catch (IOException ioe) {} finally { try { if (socket != null) { socket.close(); } } catch (IOException ioe) {}} socket.setSoTimeout(150);PrintWriter output =new PrintWriter( new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);output.write(sendByte);output.flush();BufferedReader input= new BufferedReader(new InputStreamReader(socket.getInputStream()));System.out.println(input.readLine());input.read(devReturnData);这里的sendByte、devReturnData都是字节数组吗?我需要都是字节数组。 to CharmingChen(charming):好象不行,换了两类,它是报超时的错。QQ:32372810MSN:[email protected]帮我解决,谢谢了。 通常都是需要使用缓冲来读数据。比如: byte[] buf = new buf[1024]; int len = 0; while (( len = input.read( buf ) ) != 0 ) { // 处理数据 ... } 怎么SOCKET有什么自己丢失数据包呢。有时服务端没有返回数据,客户端就收到自己刚才发出的数据。 dinosaur_cl(慧剑)写得很好啊 搂主没看啊通常都是需要使用缓冲来读数据。比如: byte[] buf = new buf[1024]; int len = 0; while (( len = input.read( buf ) ) != 0 ) { // 处理数据 ... } while (( len = input.read( buf ) ) != 0 ) { // 处理数据 ... }循环里的处理数据是不是说已经接受数据完了,关闭当前SOCKET。// 处理数据应该怎么写? byte[] portReturnData = new byte[1024]int len = 0;DataInputStream input = new DataInputStream(socket.getInputStream());while (( len = input.read( portReturnData ) ) != 0 ) { break;}这样写程序接收数据,它是有时收不全;假如收到的正确字节数据是: a5 12 99 80 12 b1 ff收不全的时候的字节数据是: a5它只能收到字节流一个头,也就是一个帧头。频率是五次左右有一次。这个现象比较奇怪。真搞不懂。 这句有问题:DataInputStream input = new DataInputStream(socket.getInputStream());你需要确认你的数据类型,不是任何数据流都可以用DataInputStream. 如果你无法确定,可以直接用InputStream, 如想提高效率,可以用BufferedInputStream. DataInputStream 改成BufferedInputStream也没有用,有时的收到数据只有头一个字节。 你设置的timeout时间是不是太短了?????? 那要怎么设置timeout的时间啊,设置多大为好? netbeans 如果将项目移除(不删除项目,就无法再次用netbeans打开该项目,这是怎么回事 关于反射 线程小问题 如何获取一个网页的源代码? winXP下出现中文乱码问题,请大家帮帮忙 网页中如何插入applet?要支持ie6的 JAVA线程的问题 关于JBuilder的使用 求教:有没有JAVA 的反编译器??? 我已经买了java2核心技术,卷1和卷2,可是怎么看不太懂呀。是不是应该上个补习班呢? 这个错误是什么意思? 如何判断输入字符串是否含有非法字符?
output.write(sendByte);
output.flush();
//楼主试一试.
帮你顶一下!
remove socket.setSoTimeout(150);
因为有时对方不存在的话就不返回数据回来,但对方存在肯定有正确数据传过来。
DataOutputStream output = new DataOutputStream(socket.getOutputStream());
output.write(sendByte);
用了output.flush();
依然没有解决,是不是要关闭output啊。
socket = new Socket(InetAddress.getByName(hostAddress), iCommPort);
socket.setSoTimeout(150);
DataOutputStream output = new DataOutputStream(socket.getOutputStream());
output.write(sendByte);
output.flush();
DataInputStream input = new DataInputStream(socket.getInputStream());
input.read(devReturnData);
} catch (SocketException se) {
System.out.println("Server not starting!");
ifLink = true;
} catch (IOException ioe) {
} finally {
try {
if (socket != null) {
socket.close();
}
} catch (IOException ioe) {}
}
socket = new Socket(InetAddress.getByName(hostAddress), iCommPort);
System.out.println("Connection to Server accepted:"+socket);
PrintWriter output =new PrintWriter(
new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); socket.setSoTimeout(150);
//DataOutputStream output = new DataOutputStream(socket.getOutputStream());
output.write(sendByte);
output.flush();
//DataInputStream input = new DataInputStream(socket.getInputStream());
BufferedReader input= new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(input.readLine());
input.read(devReturnData);
} catch (SocketException se) {
System.out.println("Server not starting!");
ifLink = true;
} catch (IOException ioe) {
} finally {
try {
if (socket != null) {
socket.close();
}
} catch (IOException ioe) {}
}
PrintWriter output =new PrintWriter( new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
output.write(sendByte);
output.flush();
BufferedReader input= new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(input.readLine());
input.read(devReturnData);
这里的sendByte、devReturnData都是字节数组吗?
我需要都是字节数组。
好象不行,换了两类,它是报超时的错。
QQ:32372810
MSN:[email protected]
帮我解决,谢谢了。
比如: byte[] buf = new buf[1024];
int len = 0; while (( len = input.read( buf ) ) != 0 ) {
// 处理数据
... }
搂主没看啊通常都是需要使用缓冲来读数据。
比如: byte[] buf = new buf[1024];
int len = 0; while (( len = input.read( buf ) ) != 0 ) {
// 处理数据
... }
// 处理数据
... }
循环里的处理数据是不是说已经接受数据完了,关闭当前SOCKET。
// 处理数据
应该怎么写?
int len = 0;
DataInputStream input = new DataInputStream(socket.getInputStream());
while (( len = input.read( portReturnData ) ) != 0 ) {
break;
}
这样写程序接收数据,它是有时收不全;
假如收到的正确字节数据是: a5 12 99 80 12 b1 ff
收不全的时候的字节数据是: a5
它只能收到字节流一个头,也就是一个帧头。
频率是五次左右有一次。这个现象比较奇怪。真搞不懂。
DataInputStream input = new DataInputStream(socket.getInputStream());你需要确认你的数据类型,不是任何数据流都可以用
DataInputStream. 如果你无法确定,可以直接用
InputStream, 如想提高效率,可以用BufferedInputStream.