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字符串表示结束比较好,在客户端也是的。 ------解决方案--------------------