Ich versuche, ein einfaches Programm mit einem Server und einem Client zu erstellen, wobei Textstrings hin und her geleitet werden. Ich habe Probleme, die Verbindung herzustellen. Ich habe eine Testdruckzeile direkt unter der Socket-Accept-Zeile und es wird nie gedruckt, also nehme ich an, dass das Problem dort ist, aber ich bin nicht sicher, wie man eine gründlichere Überprüfung durchführt.Fehler beim Akzeptieren der Socket-Verbindung in Java
Ich habe dieses Programm in Eclipse geschrieben, wenn das einen Unterschied macht. Diese
ist der Server:
import java.io.*;
import java.net.*;
public class HW2Q1S {
public static void main(String[] args) throws Exception {
try {
//connection
ServerSocket srvr = new ServerSocket(7654);
Socket skt = srvr.accept();
System.out.println(skt.getPort());
//data xfer
BufferedReader sIn = new BufferedReader(new InputStreamReader(skt.getInputStream()));
PrintWriter sOut = new PrintWriter(skt.getOutputStream(), true);
//string receiving
int count = 1;
String msg = "";
while((msg = sIn.readLine()) != null) {
while(count < 11) {
msg = sIn.readLine();
System.out.println("Received: "+ msg);
String returnMsg = msg.toUpperCase();
System.out.println("Capped: "+ returnMsg);
sOut.write(returnMsg);
count++;
}
} //end of read from client in while loop
if (count == 10) {
System.out.println("Max reached.");
}
srvr.close();
return;
}
catch(Exception e) {
System.out.println("Error caught: " + e);
}
} // end of main
} // end of class
Und dies ist der Kunde:
import java.util.Random;
import java.io.*;
import java.net.*;
public class HW2Q1C {
public static void main(String[] args) throws IOException {
String capped = "";
String temp = "";
try {
//make the connection
Socket skt = new Socket("localhost", 7654);
BufferedReader cIn = new BufferedReader(new InputStreamReader(skt.getInputStream()));
PrintWriter cOut = new PrintWriter(skt.getOutputStream(), true);
//send 11 strings
for (int i = 0; i < 11; i++) {
temp = Stringer();
cOut.write(temp);
System.out.println("Sending: " + temp);
}
//receive server strings
while(cIn.readLine() != null) {
capped = cIn.readLine();
System.out.println("From server: "+ capped);
}
skt.close();
} // end of connection try block
catch(Exception e) {
System.out.print("Whoops! It didn't work!\n");
}
} //end of main
static String Stringer() {
String msg, alpha;
msg = "";
alpha = "abcdefghijklmnopqrstuvwxyz";
Random rnd = new Random();
for (int i = 0; i < 10; i++) {
msg += alpha.charAt(rnd.nextInt(25));
}
return msg;
}
} //end of class
Dank!
Ich denke, eine Ausnahme tritt auf, was ist der Stacktrace? Hast du versucht es zu debuggen? – Altoyyr
Das habe ich mir gedacht, aber in der Konsole ist nichts. Es ist komplett leer. – TurtleOrRodeo
Ich habe gerade Ihr Programm ausgeführt und soweit ich sehen kann, ist die Verbindung selbst in Ordnung. srvr.accept() wartet, bis ein Client eine Verbindung herstellt (was es richtig macht) Vielleicht ist das eine zusätzliche Hilfe http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html – Altoyyr