Ich war vor diese Frage ...Socket Server Client-Thread, Java
ich die TCP-Socket-Verhalten in meinem Netzwerk testen möchten, beacuse ich meine Java-Anwendungen testen müssen ...
I eine Server-Client-Modell Beispiel erstellt, Themen ...
Hier die ConsumerServer
public class ConsumerServer extends Thread {
private ServerSocket SrvrScktConsumer;
Socket clientSocket = null;
private boolean isConsumerRunning = false;
public ConsumerServer(int ConsPort) {
try {
SrvrScktConsumer = new ServerSocket(ConsPort);
System.out.println(NL + "ConsumerServer Listening on port number: " + ConsPort);
} catch (IOException e) { }
}
@Override public void run() {
try {
clientSocket = SrvrScktConsumer.accept();
InputStream input;
byte[] innerBytes = new byte[1024];
try {
input = clientSocket.getInputStream();
Integer iRemotePort = clientSocket.getPort();
String sRemoteHost = clientSocket.getInetAddress().getHostAddress();
System.out.println("ConsumerServer: Remote Connection\n\tPort:" + iRemotePort+ " Host:" + sRemoteHost);
isConsumerRunning = true;
while (isConsumerRunning) {
try {
byte[] incomingBytes = Arrays.copyOf(innerBytes, input.read(innerBytes));
jtaMessages.append(NL + "Consumer GET " + new String(incomingBytes));
jtfLastReceived.setText(new String(incomingBytes));
} catch (IOException | NegativeArraySizeException | IndexOutOfBoundsException e) {
isConsumerRunning = false;
}
}
System.out.println(NL + "ConsumerClient closing from Host " + sRemoteHost + " Port " + iRemotePort);
try { if (input != null) input.close(); } catch (IOException e) { }
} catch (IOException e) {
System.out.println(NL + "Error Creating ConsumerClient\n\t:" + e.toString());
}
} catch (IOException | NullPointerException e) {
System.out.println(NL + "ConsumerServer Stopped: " + e.toString()) ;
}
System.out.println(NL + "Exiting ConsumerServer...");
}
public void stopServer() {
try {
SrvrScktConsumer.close();
} catch (IOException | NullPointerException e) { }
try {
clientSocket.close();
} catch (IOException | NullPointerException e) { }
isConsumerRunning = false;
}
};
Hier die ProducerClient
mit 10Ich möchte den angegebenen Blockcode entfernen, aber wenn ich entferne .. Mein Test funktioniert nicht richtig.
Hier ist die Klasse vor Klassen mit
public class ClientServerShort extends JFrame {
private JButton jbSendMessage = new JButton("Send Message");
private JLabel jlLastReceived = new JLabel("Last Received");
private JTextArea jtaMessages = new JTextArea(5,20);
private JScrollPane jspMessages = new JScrollPane(jtaMessages);
private JToggleButton jtbConsumer = new JToggleButton("Launch Consumer Server");
private JToggleButton jtbProducer = new JToggleButton("Launch Producer Client");
private JTextField jtfLastReceived = new JTextField();
private JTextField jtfSendMessage = new JTextField();
static boolean bProducerReady = false;
static final String NL = System.getProperty("line.separator");
ConsumerServer thrdConsumerServer = null;
ProducerClient thrdProducerClient = null;
public ClientServerShort() {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jbSendMessage.addActionListener((ActionEvent evt) -> {
if (!jtfSendMessage.getText().isEmpty()) {
bProducerReady = true;
}
});
jlLastReceived.setBorder(BorderFactory.createEtchedBorder());
jlLastReceived.setHorizontalAlignment(SwingConstants.CENTER);
jtbConsumer.addActionListener((ActionEvent evt) -> {
if (jtbConsumer.isSelected()) {
if (thrdConsumerServer == null) {
thrdConsumerServer = new ConsumerServer(1027);
thrdConsumerServer.start();
}
} else {
if (thrdConsumerServer != null) {
thrdConsumerServer.stopServer();
thrdConsumerServer = null;
}
}
});
jtbProducer.addActionListener((ActionEvent evt) -> {
if (jtbProducer.isSelected()) {
if (thrdProducerClient == null) {
thrdProducerClient = new ProducerClient("192.168.0.49", 1027);
thrdProducerClient.start();
}
} else {
if (thrdProducerClient != null) {
thrdProducerClient.stopClient();
thrdProducerClient = null;
}
}
});
jtfLastReceived.setEditable(false);
JPanel jpMessagesUp = new JPanel();
jpMessagesUp.setLayout(new GridLayout(2, 2, 6, 6));
jpMessagesUp.add(jbSendMessage);
jpMessagesUp.add(jtfSendMessage);
jpMessagesUp.add(jlLastReceived);
jpMessagesUp.add(jtfLastReceived);
getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
add(jtbProducer);
add(jtbConsumer);
add(jpMessagesUp);
add(jspMessages);
pack();
}
public static void main(String args[]) {
EventQueue.invokeLater(() -> {
new ClientServerShort().setVisible(true);
});
}
}
Frage:
Was ist der Grund, warum entferne ich die Snippet-Code angeben (in ProducerClient), meine Einzel App funktioniert nicht ?
Ich nehme Ihre erste Aussage als "eine ähnliche Frage wurde mir bereits geschlossen". Das wird auch mit dieser Frage geschehen. SO ist kein "Wir debuggen Ihr riesiges Produkt für Sie" -Service. Sie sehen, Sie fallen hier eine ** ernste ** Menge. Und dann was? Sie erwarten, dass wir all das verdauen, um dann herauszufinden, warum eine einzelne Schlafanweisung mit einer Zählerschleife das Verhalten Ihres Codes verändert? – GhostCat
@GhostCat Leider ist mein Account nicht verfügbar und vor Frage habe ich ohne Antwort gelöscht. –
Nur sagend: Ich denke, dass Sie nicht viel positives Feedback auf solche Eingabe erhalten werden. Sie sollten etwas Zeit bei [Hilfe] verbringen, um zu verstehen, worum es auf dieser Seite geht und wie/was Sie hier fragen. Wie gesagt, geht es bei solchen Eingaben normalerweise nicht zu gut in Bezug auf hilfreiche Antworten. – GhostCat