TCP zwischen C und C#

Gast #1492021
Lesenswert?
• ▲
▼
Hallo,
habe folgenden Code in C# als Server:
1
private void listen_tcp()
2
        {
3
            IPAddress ipAddress = IPAddress.Any;
4
            TcpListener listener = new TcpListener(ipAddress, 12345);
5
            listener.Start();
6
            Console.WriteLine("Server is running");
7
            Console.WriteLine("Listening on port " + 12345);
8
            Console.WriteLine("Waiting for connections...");
9
            label15.Text = "test";
10
            while (true)
11
            {
12
                Socket s = listener.AcceptSocket();
13
                Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);
14
                byte[] b = new byte[20];
15
                int k = s.Receive(b);
16
                Console.WriteLine("Received:");
17
                for (int i = 0; i < k; i++)
18
                    Console.Write(Convert.ToChar(b[i]));
19
                ASCIIEncoding enc = new ASCIIEncoding();
20
                s.Send(enc.GetBytes("Server responded"));
21
                Console.WriteLine("\nSent Response");
22
                s.Close();
23
            }
24
            }
Und den Client in C:
1
WSADATA wsa;
2
  SOCKET mysocket;
3
  SOCKADDR_IN addr;
4
  long rc;
5
  char mystring[20] = "Hallo\n";
6

7
  if(WSAStartup(MAKEWORD(2,0),&wsa)!=0) 
8
    printf("Winsock konnte nicht gestartet werden\n");
9
  else
10
    printf("Winsock gestartet\n");
11

12
  mysocket=socket(AF_INET,SOCK_STREAM,0);
13

14
  if(mysocket==INVALID_SOCKET)
15
  {
16
    printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
17
    return 1;
18
  }
19
  else
20
  {
21
    printf("Socket erstellt!\n");
22
  }
23
  memset(&addr,0,sizeof(SOCKADDR_IN));
24
  addr.sin_family=AF_INET;
25
  addr.sin_port=htons(12345); // wir verwenden mal port 12345
26
  addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner ist unser eigener
27
  rc=connect(mysocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));
28
  if(rc==SOCKET_ERROR)
29
  {
30
    printf("Fehler: connect gescheitert, fehler code: %d\n",WSAGetLastError());
31
    return 1;
32
  }
33
  else
34
  {
35
    printf("Verbunden mit 127.0.0.1..\n");
36
  }
37
  send(mysocket,mystring,sizeof(mystring),0);
38

39
  strcpy(mystring,"Welt");
40
  send(mysocket,mystring,9,0);
Das Hallo kommt auch an, nur das Welt nicht. Sieht jemand den Fehler?
Grüße
Persönliche Seite #1492059
Lesenswert?
• ▲
▼
Vielleicht wartet die Receive-Routine nicht darauf, dass 20 Zeichen 
empfangen wurden, sondern kehrt nach ein paar Datenpaketen - dem "Hallo" 
- zurück? (So ist es zumindest mit recv in C, ob das in C# auch so ist 
weiß ich nicht) Vermutlich solltest du Receive öfters aufrufen, am 
besten in einer Schleife, denn im worst case könnte jedes Zeichen 
einzeln ankommen.
#1492131
Lesenswert?
• ▲
▼
Die Frage ist: Was soll überhaupt gesendet werden?
1
char mystring[20] = "Hallo\n";
2

3
// sizeof oder strlen
4
send(mysocket,mystring,sizeof(mystring),0);
5

6
// strcpy oder strncat
7
strcpy(mystring,"Welt");
8

9
// strlen("Hallo Welt") == 10, strlen("Welt") == 4, aber warum hier 9
10
send(mysocket,mystring,9,0);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren