我的Java客户端不是';t读取整个套接字响应
我正在编写一个java-c客户机服务器,其中服务器是c语言,客户机是java语言。这个插座可以重复使用。我不知道为什么,但是客户端从套接字读取第一个响应,然后循环,这就像客户端没有得到“\n”。我没有得到什么? C服务器以(length:stringlength:string)等格式发送响应我的Java客户端不是';t读取整个套接字响应,java,sockets,server,client,reusability,Java,Sockets,Server,Client,Reusability,我正在编写一个java-c客户机服务器,其中服务器是c语言,客户机是java语言。这个插座可以重复使用。我不知道为什么,但是客户端从套接字读取第一个响应,然后循环,这就像客户端没有得到“\n”。我没有得到什么? C服务器以(length:stringlength:string)等格式发送响应 import java.io.*; 导入java.net。*; 公共类客户端{ 公共静态void main(字符串[]args){ 如果(参数长度!=2){ System.err.println(“使用:j
import java.io.*;
导入java.net。*;
公共类客户端{
公共静态void main(字符串[]args){
如果(参数长度!=2){
System.err.println(“使用:java客户机服务器端口”);
系统出口(1);
}
试一试{
BufferedReader fromUser=新的BufferedReader(新的InputStreamReader(System.in));
System.out.println(“插入input1:”);
字符串input1=fromUser.readLine();
System.out.println(“插入input2:”);
字符串input2=fromUser.readLine();
sockets=newsocket(args[0],Integer.parseInt(args[1]);
//BufferedReader fromServer=新的BufferedReader(新的InputStreamReader(s.getInputStream(),“UTF-8”);
InputStream=s.getInputStream();
BufferedWriter-toServer=新的BufferedWriter(新的OutputStreamWriter(s.getOutputStream(),“UTF-8”);
做{
字符串消息=“(“+input1.getBytes(“UTF-8”).length+”:“+input1+input2.getBytes(“UTF-8”).length+”:“+input2+”)”;
toServer.write(消息);
toServer.flush();
/*正在从服务器读取结果*/
//琴弦浅黄色;
字符串输出=”;
字节[]缓冲区=新字节[4096];
int-read;
而((read=is.read(buffer))!=-1){
输出=新字符串(缓冲区,0,读取);
系统输出打印(输出);
System.out.flush();
};
if(output.charAt(0)!=”(“| | output.charAt(output.length()-1)!=”){
System.out.println(“使用协议时出错”);
}
如果(output.indexOf(':'),您希望您的客户端何时停止循环?在读取整个服务器输出的特定输入后!它如何知道何时读取整个服务器输出?您的代码将一直读取,直到套接字关闭。类似于“while((read=is.read(buffer))!=-1”工作不正常。它工作正常。read
如果套接字已关闭,则返回-1。服务器是否在发送响应后关闭套接字?您希望客户端何时停止循环?在读取整个服务器输出的特定输入后!它如何知道何时读取整个服务器输出?您的代码保持读取状态g直到套接字关闭。就像“while((read=is.read(buffer))!=-1”工作不正常。它工作正常。read
如果套接字关闭,返回-1。服务器是否在发送响应后关闭套接字?
import java.io.*;
import java.net.*;
public class client {
public static void main(String[] args) {
if (args.length != 2) {
System.err.println("Use: java Client server port");
System.exit(1);
}
try{
BufferedReader fromUser = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Insert input1: ");
String input1 = fromUser.readLine();
System.out.println("Insert input2: ");
String input2 = fromUser.readLine();
Socket s = new Socket(args[0], Integer.parseInt(args[1]));
//BufferedReader fromServer = new BufferedReader(new InputStreamReader(s.getInputStream(),"UTF-8"));
InputStream is = s.getInputStream();
BufferedWriter toServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream(),"UTF-8"));
do {
String message = "(" + input1.getBytes("UTF-8").length + ":" + input1 + input2.getBytes("UTF-8").length + ":" + input2 + ")";
toServer.write(message);
toServer.flush();
/*reading result from server*/
//String buff;
String output = "";
byte[] buffer = new byte[4096];
int read;
while((read = is.read(buffer)) != -1) {
output = new String(buffer, 0, read);
System.out.print(output);
System.out.flush();
};
if(output.charAt(0) != '(' || output.charAt(output.length()-1) != ')'){
System.out.println("error using protocol");
}
if(output.indexOf(':')<0){
System.err.println("error using Canonical S-expression!");
System.exit(2);
}
for(int i=output.indexOf(":")+1;i<output.length()-2;i++){
System.out.print(output.charAt(i));
}
System.out.println();
s.close();
System.out.println("Insert input1: ('end' to exit)");
input1 = fromUser.readLine();
} while(!input1.equals("end"));
}
catch(IOException e){
System.err.println(e.getMessage());
e.printStackTrace();
System.exit(100);
}
}
}