Socket Verbindung

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Socket Verbindung

    Hallo zusammen,

    ich habe wie die Überschrift schon sagt ein kleines Problem mit Sockets. Ich habe mir einen kleinen C# Server geschrieben an den ich Daten senden möchte. In diesem einfachen Testfall einen String. Die Client Server Anwendung unter C# war mit ein paar wenigen Zeilen geschrieben. Jetzt suche ich nach einer Idee wie ich ähnliches in Objective-C schreibe. Man findet bei GitHub viele kleine Chatprogramme die auch funktionieren. Aber ich würde gerne klein anfangen und das ganze verstehen. Leider wird es dann mit entsprechen Erklärungen dünn.

    Hat jemand eine Idee wo ich mich einlesen könnte? Gegen etwas Code mit Erklärung wehre ich mich auch nicht.

    Danke

    Gruß


    Falls jemand einen C# Client/Server nutzen möchte:

    Server:

    Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. using System.IO;
    7. using System.Net;
    8. using System.Net.Sockets;
    9. namespace ConsoleServer
    10. {
    11. class Program
    12. {
    13. static void Main(string[] args)
    14. {
    15. Socket ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    16. IPEndPoint ServerEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3000);
    17. ServerSocket.Bind(ServerEndpoint);
    18. ServerSocket.Listen(1);
    19. Console.WriteLine("Server wartet.....");
    20. Socket ClientSocket = ServerSocket.Accept();
    21. Console.WriteLine("Client connected");
    22. byte[] buffer = new byte[64];
    23. int receivedBytes = ClientSocket.Receive(buffer);
    24. Console.WriteLine("Es wurden {0} Bytes empfangen: ", receivedBytes);
    25. Console.WriteLine(ASCIIEncoding.ASCII.GetString(buffer, 0, receivedBytes));
    26. ServerSocket.Close();
    27. Console.Read();
    28. }
    29. }
    30. }
    Alles anzeigen


    Client

    Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. using System.IO;
    7. using System.Net;
    8. using System.Net.Sockets;
    9. namespace ConsoleClient
    10. {
    11. class Program
    12. {
    13. static void Main(string[] args)
    14. {
    15. Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    16. IPEndPoint ClientEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3000);
    17. clientSocket.Connect(ClientEndpoint);
    18. if (clientSocket.Connected)
    19. Console.WriteLine("Socket ist verbunden");
    20. else
    21. throw new Exception("Fehler beim Verbinden");
    22. Console.WriteLine("Nachricht: ");
    23. string ToSend = Console.ReadLine();
    24. byte[] bufferToSend = ASCIIEncoding.ASCII.GetBytes(ToSend);
    25. clientSocket.Send(bufferToSend);
    26. Console.WriteLine("Daten wurden gesendet");
    27. clientSocket.Close();
    28. Console.Read();
    29. }
    30. }
    31. }
    Alles anzeigen


    netload.in/dateigOlrXSbPd1/CClient-Server.zip.htm
  • Ja es ist nicht so als hätte ich google nicht schon befragt. Kenne auch diese Seite. Ich suche eher Literatur. Ich kann nicht Glauben das ich in C# 10 Zeilen brauche und in Objective-C einen Nachmittag um eine blöde socket Verbindung zu bekommen.

    trotzdem danke für die mühe
  • Wisp das nicht?

    Ich brauche 10min in objective-c dafür aber einen nachmittag in c#. Ist doch nur eine frage was man kann und was nicht. Wen du nicht bereit bist die Zeit zu investieren um es zu lernen, dann such dir jemanden der es dir für Geld macht.

    Gruss

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • StGo schrieb:

    Hat jemand eine Idee wo ich mich einlesen könnte? Gegen etwas Code mit Erklärung wehre ich mich auch nicht.


    Schlüsselwort ist "Socket"! Mit dem Wort findest Du im Internet jede Menge an Tuts, Lektüre, HowTo's, manpages usw.

    Die Verwendung von Sockets ist immer sehr ähnlich (unabhängig von der Programmiersprache und System). Man kann es lowlevel programmieren oder auf bereits vorprogrammierte Klassen zurückgreifen, die für einen bestimmten oder mehrere Anwendungsfälle programmiert wurden.

    Ich verwende gerne: github.com/robbiehanson/CocoaAsyncSocket
    Hier findest Du Beispiele und den Quellcode.
  • @manoh
    dein Link ist ein guter Tip. Das ist das beste was ich bis jetzt bei GitHub gesehen habe. Und anscheinend auch dokumentiert. Was ja nicht der Regelfall ist.

    Dann setze ich da mal

    @Thallius
    du hast sicher recht je nachdem was man gelernt hat ist es einfacher. In meinem Fall geht es um ein Uniprojekt. Und ja eine Programmierkenntnisse bestehen mehr aus Theorie. Eine Algorithmus schreiben oder sequenzielles Programm sind kein Problem. Spätestens beim parallelisieren stößt meine Theorie ganz hart auf die Praxis.
    Was auch der Grund ist das ich lieber ein gutes Buch lese anstelle irgendein semiprofessionelles Tutorial. Aber ich bin dabei mich zu bessern. Das Buch vom Armin habe ich zumindest schon zweimal gekauft. Nur am Ende der beiden Bücher Bin ich noch nicht angekommen. Da das Studium aber gerade am Ende ankommt denke ich das ich jetzt zeit finden werde.

    danke
  • Naja du schreibst im ersten Post

    "Ich würde das gerne klein angehen und verstehen". Wenn Du damit meinst zu verstehen wie man ein fertiges Framework benutzt (Egal ob jetzt C# wo du das ja machst oder unter iOS wo du es nun auch machen willst) dann habe ich eben eine andere Auffassung von "verstehen".

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • So inzwischen habe ich das oben genannte Tutorial ausprobiert. Die Erklärungen sind leider etwas zu kurz gekommen meiner Meinung. Ich habe mich etwas daran versucht aber scheitere an ein paar kleinen Problemchen. Falls jemand Lust hat mir die Fehler zu erklären wäre ich euch sehr dankbar.

    Ich habe das Projekt hier hochgeladen: github.com/StGo81/Studienprojekt

    Falls es jemand per Mail haben möchte kann ich auch das realisieren.

    Danke

    Gruß Stephan
  • Nun, die Fehlermeldungen sind eigentlich recht aussagekräftig. Eine Warnung kommt, weil du im Interface vom ViewContoller das Protokoll UITableViewDataSource nicht angegeben hast. Alle anderen Fehlermeldungen entstehen, weil in den Build Entstellungen Automatic Reference Counting (ARC) aktiviert ist, der Code aber für Manuelles Reference Counting geschrieben ist. Da hast du nun zwei Möglichkeiten.
    1. Du entfernst alle release, autorelease und dealloc Nachrichten (retains sind ja keine vorhanden).
    2. Du schaltest ARC in den Build Einstellungen aus.
    Im zweiten Fall musst Du dann aber auch weak durch assign bzw. unsafe_unretained ersetzen. Ach, und wenn du Instanzvariablen für weak Properties deklarierst, dann musst du diese natürlich auch weak deklarieren. Allerdings kannst du auch ganz auf die Deklaration von Instanzvariablen für Properties verzichten und das dem Compiler überlassen.

    Edit: Hier noch Lesefutter zum Thema Automatic Reference Counting.
  • Hallo Michael,

    danke für deine Antwort. Das beruhigt mich das es "nur" ein Problem mit ARC ist. Ich habe mich schon gefragt warum ich die Ressoucen wieder freigeben muss. Ich war mich eigentlich sicher das automatisch geschieht.
    Deinen Link werde ich mir heute Abend trotzdem mal zu gemüte führen.

    Bei den Instanzvariablen muss ich nochmal nachlesen. Aber somit weiss ich schonmal die Richtung.

    Ich komme mit Fehlermeldung nur schwer klar imoment. Das strotzte zwischenzeitlich mal nach Fehlern. Habe dann aufgegeben. Werde mir mühe geben es besser zu machen :)

    Danke