Java-Echo-Server TCP *und* UDP-Implementierung?
Ich habe gerade begonnen, socket-Programmierung, und ich arbeite an einem Echo-server in Java. Eines der Dinge, die ich tun möchte ist, implementieren Sie den server in der TCP-und UDP-und ermöglichen die client zu wählen, welches Protokoll zu verwenden, zur Laufzeit.
Dies ist eine noob Frage, aber wie kann ich damit ein Benutzer diese option, um wählen Sie TCP-oder UDP-Protokolle? Ich versucht, indem in einer if-else-am Anfang die verzweigt auf das Protokoll Wahl von Eingabe über den scanner, aber das nur überspringt die beiden Blöcke unabhängig von der Wahl?
Dank.
Habe ich implementiert die TCP-echo-server:
public class EchoServer
{
public static void main(String[] args) throws IOException
{
ServerSocket serverSocket = null;
try{
serverSocket = new ServerSocket(10007);
}
catch (IOException e)
{
System.err.println("Could not listen on port: 10007.");
System.exit(1);
}
Socket clientSocket = null;
System.out.println ("Waiting for connection.....");
try {
clientSocket = serverSocket.accept();
}
catch (IOException e)
{
System.err.println("Accept failed.");
System.exit(1);
}
System.out.println ("Connection successful");
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(),
true);
BufferedReader in = new BufferedReader(
new InputStreamReader( clientSocket.getInputStream()));
String cAddress = "";
String inputLine;
cAddress = clientSocket.getInetAddress().toString();
while ((inputLine = in.readLine()) != null)
{
System.out.println ("Server: " + inputLine + " " + cAddress + " ");
out.println(inputLine + " " + cAddress);
if (inputLine.equals("bye"))
break;
}
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
}
- Und der client-Seite:
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class EchoClient {
public static void main(String[] args) throws IOException {
Scanner s = new Scanner(System.in);
String serverHostname;
System.out.println("Enter an IP value: ");
serverHostname = s.next();
//String serverHostname = new String ("127.0.0.1");
if (args.length > 0)
serverHostname = args[0];
System.out.println ("Attemping to connect to host " +
serverHostname + " on port 10007.");
Socket echoSocket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
echoSocket = new Socket(serverHostname, 10007);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host: " + serverHostname);
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for "
+ "the connection to: " + serverHostname);
System.exit(1);
}
BufferedReader stdIn = new BufferedReader(
new InputStreamReader(System.in));
String userInput;
System.out.print ("input: ");
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("echo: " + in.readLine());
System.out.print ("input: ");
}
out.close();
in.close();
stdIn.close();
echoSocket.close();
}
}
- stackoverflow.com/questions/2819274/...
- Dieser ist viel zu breit, um hier beantwortet werden (Fällt unter die "Notwendigkeit, ein Buch zu schreiben, zu beantworten" - Abschnitt der FAQ).
- Wenn das problem mit dem client-code, warum gehst du nicht zeigen uns den server-code?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine Möglichkeit (die ich kenne) zu tun-Bedingungen in Java, ohne Verwendung der If-Anweisung. Wenn Ihr sonst-wenn nicht funktioniert, dann waren Sie zu prüfen, den Zustand falsch. Strings vergleichen im java verwenden Sie String.equals( String ), kannst du nicht mit ==.
Versuchen Sie es wieder auf die standard-Eingabe, sondern tun Sie einfach etwas einfaches.
Wie:
doUDP( int port )
die nicht udp, und ein anderes namensdoTCP(int port)
die tcp. Und dann haben Sie den einen oder anderen Anruf, basierend auf der if-Anweisung.String.indexOf(...) >= 0
und nichtindex > 0
.Wenn Sie wissen möchten, wie es möglich ist, in die socket-Ebene, Sie sollten in der Lage sein, um die Bindung des TCP-serversocket und UDP-serversocket in den gleichen port. Sie haben separate threads Handhabung jede der buchsen. Für Anweisungen, wie zu schreiben, UDP server socket (genannt DatagramSocket-check dieses tutorial.
Müssen Sie öffnen Sie zwei getrennte buchsen mit unterschiedlichen ports in Ihrer Anwendung.
Darüber hinaus müssen Sie separate Threads in Java, die die Verwendung ist beschrieben in eine Menge how to ' s und tutorials.
Socket anlegen Verwendung DatagramSocket für UDP und für TCP-ServerSocket. Ich weiß nicht, was Sie tun möchten, aber Sie müssen wissen, dass Sie haben, um dataloss in UDP für sich selbst. UDP wird Häufig in streaming audio oder video, wo es unkritisch ist, zum Verlust einiger Daten.
Überprüfen Sie Ihre Anwendung benötigt. Weitere Informationen finden Sie unter http://en.wikipedia.org/wiki/User_Datagram_Protocol#Comparison_of_UDP_and_TCP.
Ihre willkommen.