[C#] Sockets: Client & Server probleem

Pagina: 1
Acties:
  • 65 views sinds 30-01-2008

  • monnick
  • Registratie: December 2005
  • Niet online
Ik ben nog niet zo lang begonnen met het leren van C#. Ik lees het boek C# Grand Cru, daar leer ik C# uit. Ook ben ik zelf wat dingetjes aan het aankloten zoals nu, ik was aan het knutselen met sockets. Ik wil een simpele server maken die een berichtje kan ontvangen en kan afdrukken op het scherm. Met de client kan je een berichtje sturen. Als ik de server start en daarna de client dan staat er zoals ik wil: Client connected to 192.168.1.2:8888. Dan komt er het bericht wat voor string ik naar de server wil sturen, dan vul ik iets randoms in en ram ik op enter. En dan......niks. 8)7

Het berichtje komt dus waarschijnlijk niet aan bij de server. Maar misschien ligt het ook wel aan de client. Maar er is dus wel een connectie tussen de server en de client. Ik heb zelf al geprobeerd het probleem op te lossen maar ik kan geen mogelijke fout vinden. Een error bij het compilen geeft hij in ieder geval niet. Het is dus een structurele fout.

SERVER:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;

public class SocketListener
{
    // Variable for incoming data
    public static string data = null;

    public static void StartListening()
    {
        // Buffer for incoming data
        Byte[] buffer = new Byte[1024];

        // Get the hostname
        IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
        IPAddress ipAddress = ipHostInfo.AddressList[0];
        IPEndPoint ipEnd = new IPEndPoint(ipAddress, 8888);

        // Create the listener
        Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        try
        {
            // Bind the listener
            s.Bind(ipEnd);
            // Start the listener
            s.Listen(10);

            while (true)
            {
                Console.WriteLine("Server active");
                Console.WriteLine("Server address: {0}:{1}", ipHostInfo.AddressList[0].ToString(), 8888);
                Console.WriteLine("Waiting for response from the client!");

                Socket handler = s.Accept();
                data = null;

                // An incomming connection
                while (true)
                {
                    buffer = new Byte[1024];

                    int BytesRec = handler.Receive(buffer);
                    data += Encoding.ASCII.GetString(buffer, 0, BytesRec);
                }

                Console.WriteLine("Received message: {0}", data);

                Byte[] msg_back = Encoding.ASCII.GetBytes(data);

                handler.Send(data);
                handler.Shutdown(SocketShutdown.Both);
                handler.Close();
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }

    public static void Main()
    {
        StartListening();
        Console.ReadKey();
    }
}


CLIENT:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;

public class Socket_Server
{
    public static void Client_Send()
    {
        // Create a buffer for the message
        Byte[] buffer = new Byte[1024];

        // Start connection to server
        try
        {
            IPHostEntry hostIP = Dns.Resolve(Dns.GetHostName());
            IPAddress hostAddress = hostIP.AddressList[0];
            IPEndPoint endIP = new IPEndPoint(hostAddress, 8888);

            // Create the socket
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            try
            {
                s.Connect(endIP);

                Console.WriteLine("Client connected to {0}", s.RemoteEndPoint.ToString());

                // Encode the data to send.
                Console.WriteLine("Enter a string to send to the server:");
                string input = Console.ReadLine();
                byte[] msg_bytes = Encoding.ASCII.GetBytes(input);

                // Send the data
                s.Send(msg_bytes);

                // Receive the response
                int bytesRec = s.Receive(buffer);
                Console.WriteLine("Send string: {0}", Encoding.ASCII.GetString(buffer, 0, bytesRec));

                s.Shutdown(SocketShutdown.Both);
                s.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }

    public static void Main()
    {
        Client_Send();
        Console.ReadKey();
    }
}


Ik hoop dat iemand mij met dit probleem kan helpen. :)

Ps. nog even een plaatje voor de duidelijkheid:

*Klikje*

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
monnick schreef op donderdag 05 oktober 2006 @ 22:31:
Het berichtje komt dus waarschijnlijk niet aan bij de server. Maar misschien ligt het ook wel aan de client.
Installeer Ethereal en je weet het. :)

{signature}


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 09-12-2025
Probeer eens op wat meer plekken text naar je console te schrijven zodat je weet op welke regel het fout gaat.

Ik heb zelf niet met C# gewerkt, maar in Java heb ik een probleem gehad bij het uitlezen van gegevens uit de socket. Die bleef openstaan en wachten op input en ik moest middels een timeout instelling aangeven hoe lang hij moest wachten. Misschien dat het in .NET op dezelfde manier werkt, maar dat weet ik niet.

Noushka's Magnificent Dream | Unity


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Op regel 33 en 43 uit het eerste stuk code zie ik anders wel "enge" dingen staan :X
Even aangenomen dat alles daarvoor goed gaat en aan die lus wordt begonnen zie ik niet hoe je CPU ooit nog regel 51 moet bereiken ;)

[ Voor 16% gewijzigd door RobIII op 05-10-2006 23:15 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:29
Tja... Het is toch wel de bedoeling dat je evn je code zelf debugged, ipv de code gewoon ergens op 't Internet te posten.
Mbhv een programma als Ethereal, en met de debugger moet je toch wel al een heel stuk verder komen.
Dit is nu gewoon een 'ziehier m'n code, en los het ff voor me op terwijl ik iets leuks ga doen'-post, en daar doen we hier niet echt aan mee.

https://fgheysels.github.io/


Dit topic is gesloten.