我有服务器:
StringBuilder sb = new StringBuilder();
try {
ServerSocket ses = new ServerSocket(7841);
Socket s=ses.accept();
Reader br = new InputStreamReader(s.getInputStream());
OutputStream os = s.getOutputStream();
os.write("string from system".getBytes());
os.flush();
char[] request = new char[6];
int count = br.read(request);
while (count!=-1) {
sb.append(new String(request, 0, count));
count = br.read(request);
System.out.println(count);
System.out.println(sb);
}
System.out.println("111"+count);
System.out.println(sb);
}
catch (IOException e) {e.printStackTrace();}
System.out.println(sb);
和客户:
StringBuilder sb = new StringBuilder();
try {
Socket s = new Socket("127.0.0.1",7839);
Reader br = new InputStreamReader(s.getInputStream());
OutputStream os = s.getOutputStream();
os.write("string from project".getBytes());
os.flush();
char[] request = new char[6];
int count = br.read(request);
while (count!=-1) {
sb.append(new String(request, 0 , count));
// if (sb.toString().endsWith("</family>")) {
// break;
// }
count = br.read(request);
System.out.println(count);
System.out.println(sb);
}
System.out.println("111"+count);
System.out.println(sb);
}
catch (IOException e) {e.printStackTrace();}
System.out.println(sb);
问题是我无法读到字符串直到最后。例如,服务器只读“projec中的字符串”。
此外,客户端和服务器中都未找到代码System.out.println("111"+count);
。该计划有什么问题?非常感谢您的任何想法。
答案 0 :(得分:0)
你的程序很好,唯一的问题是你的Server
监听端口 7841 ,但你的客户端尝试连接端口 7839 ,他们必须连接到同一个端口。
我认为你需要找出协议之类的东西:
accept()
; 当您的客户端连接时,您必须决定:谁将首先说话,谁将回复,对话开始的标志以及对话结束的标志,此后客户端和服务器都可以正确关闭此连接。请参阅此链接https://github.com/numpy/numpy/issues/8933
如果你不喜欢请求 - 响应模式,你可以同时读写,那么也许线程方法更好,使用两个线程分开读写过程,所以读取过程不会阻塞写过程。
回到你的问题,读取过程在while循环中阻止程序,因此无法到达行System.out.print(...)
。