Bir echo istemci sunucusu yazmaya çalışıyorum ama sunucudan yanıt alamıyorum. Hatalarımın nerede olduğunu bilmiyorum. İnternette bazı örnekler gördüm. Bazıları sadece InputStream/OutputStream kullanıyor, ancak BufferedReader ve PrintWriter kullanmaya karar verdim - bu büyük farklılıklar yaratıyor mu?Echo Server eko istemiyor
Sunucu tarafı:
public class Server {
public static void main(String[] args){
Server server = new Server();
server.runServer(Integer.parseInt(args[0]));
}
private void runServer(final int port){
ServerSocket serversckt = null;
Socket socket = null;
BufferedReader in = null;
PrintWriter out = null;
try{
serversckt = new ServerSocket(port);
socket = serversckt.accept();
System.out.println("Request from client accepted!");
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
String str;
while((str = in.readLine()) != null){
System.out.println(str);
out.println(str);
out.flush();
}
}
catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
İstemci tarafı:
public class Client{
public static void main(String[] args){
Client client = new Client();
client.runClient(Integer.parseInt(args[0]), args[1]);
}
private void runClient(final int port, final String hostname){
Socket sckt = null;
try{
sckt = new Socket(hostname, port);
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
BufferedReader in = new BufferedReader(new InputStreamReader(sckt.getInputStream()));
PrintWriter out = new PrintWriter(sckt.getOutputStream(), true);
String str;
while((str = stdIn.readLine()) != null){
out.println(str);
System.out.println(in.readLine());
}
} catch(IOException e){
System.out.println(e.getMessage());
}
}
teşekkürler!
Bunu sanmıyorum (while ((str = in.readLine())! = Null) 'sunucuda engelleme çağrısıdır, bu yüzden ilk okumada" null "olacak ve sonra sonlanacak sunucu. Belki bir başkası 'BufferedReader' hakkında daha fazla bilgiye sahip ve eğer orada engelliyorsa. – Tom
Gerçekten bir * echo * sunucusunu yansıtmayan bir eko sunucusunu arayabilir misiniz? – SergeyA
@thatotherguy Büyük olasılıkla konu şu: konsoldan okumak, sunucuya göndermek ve "echo" yu oku. @OP 'System.out.println (in.readLine());' Ayrıca engelleme yapamazsınız, bu yüzden sunucu çevrimdışı olduğundan (ilk yorumu okuduğumdan) "hiçbir şey" okuyamaz veya Cevap. – Tom