Socketverbindungen innerhalb eines Prozesses



  • Hallo,

    mir scheint es, dass es nicht möglich ist innerhalb eines Prozesses einen Server z und einen Client der zu diesem connected, zu verwenden.
    Die Verbindung schlägt jedesmal fehlt, das ist mir schon in mehreren Programmiersprachen aufgefallen.

    Kurzes Beispiel:
    Ich habe ne Klasse "server". Dort gibts ne Funktion "listen", in der ein Serversocket gestartet wird und auf einkommende Clients lauscht.
    Den Server starte ich im Hintergrund mit einem Thread, so dass der Aufruf von "listen" nicht den Programmfluss unterbricht.
    Nun versuche ich im Mainthread mich auf den Server zu verbinden.. ganz normal per Sockets.

    Problem ist leider wie schon erwähnt, es geht einfach nicht.
    OS ist Linux, habs mal mit C#, Java und C++ versucht im Laufe der Zeit.

    Meine Frage nun:
    Ist das so und was kann man dagegen machen?

    Danke für Hilfe .)



  • Du brauchst doch nicht gleich Threads zu benutzen. Hast du mal versucht, einfach nicht-blockierende Sockets zu verwenden?



  • Ich möchte aber Sockets verwenden.

    Oder fällt dir was anderes sinnvolles ein um ne Netzwerkanwendung mit Unittests zu überprüfen?



  • Also bei mir funktioniert folgendes:

    import java.io.IOException;
    import java.net.*;
    
    public class ShortTest
    {
    	private static class Server implements Runnable
    	{
    		private ServerSocket serverSocket;
    
    		public Server()
    		{
    			try
    			{
    				serverSocket = new ServerSocket(3042);
    			} catch (IOException e)
    			{}
    		}
    
    		public void run()
    		{
    			try
    			{
    				Socket s = serverSocket.accept();
    				System.out.println("accepted new Client");
    			}catch (Exception e)
    			{}
    		}
    	}
    
    	private static class Client implements Runnable
    	{
    		public void run()
    		{
    			try
    			{
    				Socket s = new Socket("127.0.0.1", 3042);
    			} catch (Exception e)
    			{}
    			System.out.println("connected to Server");
    		}
    	}
    
    	public static void main(String[] args)
    	{
    		Thread t1 = new Thread(new Server());
    		Thread t2 = new Thread(new Client());
    
    		t1.start();
    		t2.start();
    	}
    }
    

    Gibt als Ausgabe:

    accepted new Client
    connected to Server
    

    Haett mich auch gewundert wenn's nicht gehen wuerde. Demnach liegts wohl an dir. Evtl. ganz komisch konfigurierte Firewall? 😕 Versuch mal, ob der Code bei dir korrekt funktioniert. Wenn nein, hast du ein Konfigurationsproblem, wenn ja hast du ein Codierungs-Problem 😉



  • listen blockiert nie. du meinst accept.



  • Headhunter schrieb:

    Ich möchte aber Sockets verwenden.

    Oder fällt dir was anderes sinnvolles ein um ne Netzwerkanwendung mit Unittests zu überprüfen?

    Ich habe nirgends geschrieben, dass du auf Sockets verzichten sollst 🙄



  • Hallo,

    in der Tat funktioniert der gepostete Beispielcode super. Keine Ahnung was ich falsch mache, ich stelle meine Verbindungen ähnlich hin, auch wenn sie sich im Moment über mehrere Javafiles erstrecken.
    Muss mal genau schauen wie ich das richtig stricken kann.. Danke für die Hilfe auf jeden Fall 🙂



  • Headhunter schrieb:

    Hallo,

    in der Tat funktioniert der gepostete Beispielcode super. Keine Ahnung was ich falsch mache, ich stelle meine Verbindungen ähnlich hin, auch wenn sie sich im Moment über mehrere Javafiles erstrecken.
    Muss mal genau schauen wie ich das richtig stricken kann.. Danke für die Hilfe auf jeden Fall 🙂

    Vielleicht startet der Client-Thread einen Connect-Versuch bevor der Server ueberhaupt laeuft? (nur eine Vermutung)


Anmelden zum Antworten