日期:2014-05-20  浏览次数:20801 次

ServerSocket接收数据流问题
启动Server后,一次次执行Client。“Just try”消息,有时可以接收到,有时不能。这是为什么啊?谁能告诉我··· 我觉得是缓冲区问题,我想知道具体原因。先谢过了!!!
import java.io.*;
import java.net.*;

public class Server {
public static void main(String[] args)throws IOException {
int port = 8033;
ServerSocket server = new ServerSocket(port);

while (true) {
Socket sock = server.accept();
InputStreamReader in = new InputStreamReader(sock.getInputStream());
StringBuffer sb = new StringBuffer(8096);

System.out.println("Handling client at " + sock.getRemoteSocketAddress());
boolean bRet = true;
while (bRet) {
if (in.ready()) {
int idx = 0;
while (idx != -1) {
idx = in.read();
sb.append((char)idx);
}
}else {
bRet = false;
}
}
in.close();
// 为什么交换前后两句的顺序,会出现不同的效果?
System.out.println(sb.toString());

}
}
}

import java.io.*;
import java.net.*;

public class Client {
public static void main(String[] args) {
byte[] data = "just try".getBytes();
try {
Socket sock = new Socket("127.0.0.1", 8033);
OutputStream out = sock.getOutputStream();
out.write(data);
sock.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

------解决方案--------------------
为什么没人回复啊```

我在想是不是因为client中没有:
out.flush();
out.close();

试过之后还是不行...
HELP HELP  HELP
到底是服务端有问题还是客戶端??? 怎么看起来这么简单的问题,没人会呢??
------解决方案--------------------
首先,第一个 // 为什么交换前后两句的顺序,会出现不同的效果? 
你关闭流的时候,是先关闭 StringBuffer,然后再关闭InputStreamReader,你那个语句等于关闭了InputStreamReader再使用StringBuffer。
------解决方案--------------------
启动Server后,一次次执行Client。“Just try”消息,有时可以接收到,有时不能。这是为什么啊?谁能告诉我··· 我觉得是缓冲区问题,我想知道具体原因。先谢过了!!!
这个问题你既然可以接收到,就证明你程序是没有问题的。
我猜最大的原因就是你操作的问题,关闭的时候一定要关闭服务端和客户端,否则下一次使用的时候就有可能出错。
另外out.flush();是必须的。
------解决方案--------------------
在server端,有可能是接受不到数据的,因为最后弄一个end字符串表示结束比较好,在客户端也是的。
------解决方案--------------------
引用:
在server端,有可能是接受不到数据的,因为最后弄一个end字符串表示结束比较好,在客户端也是的。
 
从结果显示,server确实accept()得到客户端发来的socket。
如果是因为在传输的过程中client socket中的数据丢失了,可以有什么好办法来保证它正确地把数据传过去呢?

------解决方案--------------------
引用:
启动Server后,一次次执行Client。“Just try”消息,有时可以接收到,有时不能。这是为什么啊?谁能告诉我··· 我觉得是缓冲区问题,我想知道具体原因。先谢过了!!!
这个问题你既然可以接收到,就证明你程序是没有问题的。
我猜最大的原因就是你操作的问题,关闭的时候一定要关闭服务端和客户端,否则下一次使用的时候就有可能出错。
另外out.flush();……

假如从实际考虑,服务器端的程序应该不能一会重启一次,一会重启一次。。。
您有什么更好的意见吗?我很想学习java服务器端的编程,先谢过了!
------解决方案--------------------
看看这里吧!有你需要的嘛
http://blog.csdn.net/jia20003/article/category/1270931
------解决方案--------------------