socket Problem

_Robin_

Grünschnabel
Hallo,

ich entwickele gerade unter Unix mit C ein socket Programm. Das Programm soll auf port 1010 (TCP) horchen und mir die daten die reinkommen auf der Shell ausgeben. Das ganz funktioniert bestens mit Telnet (benutze ich für den Test), jedoch wenn das richtige Programm anfragen schicken lasse, so wird lediglich ein €* ausgegeben. Mit TCPdump habe ich geprüft ob die richtige Daten reinkommt und dem ist so.

aktuell weiß ich nicht wieso das Programm €* ausgibt statt z.b. den folgenden string "RSD0900C6A0T1600496001114P 001001000000D D I 0000AVI 000999999099"

gibt es eventuell irgendwie etwas was ich nicht berücksichtigt habe ?

hier mein code

Code:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define BUF_SIZ	4096


main()
{
 int server_socket, neuer_socket;
 int laenge,bytes;
 char buffer[BUF_SIZ];
 struct sockaddr_in serverinfo, clientinfo;

 unsigned short int portnummer = 1010;
 char ip_adresse[] = "127.0.0.1";

 printf("\n Server: socket()...");

 server_socket = socket(AF_INET, SOCK_STREAM, 0);
 
 serverinfo.sin_family = AF_INET;
 serverinfo.sin_addr.s_addr = INADDR_ANY;
 serverinfo.sin_port = htons(portnummer);
 laenge = sizeof(serverinfo);

 printf("\n Server: bind()...");
 
 bind(server_socket, (struct sockaddr *)&serverinfo, laenge);

 printf("\n Server: listen()...");
 printf("\n Server mit IP %s",ip_adresse);
 printf(" an Port %d wartet...",portnummer);

 listen(server_socket, 3);

 printf("\n Server: accept()...");
 
 neuer_socket = accept(server_socket, (struct sockaddr *)&clientinfo, &laenge);
 
 printf("Verbindung mit %s",inet_ntoa(clientinfo.sin_addr));

 while((bytes = recv(neuer_socket, buffer, sizeof(buffer), 0)) > 0)
		printf(">>>>%s\n",buffer);
		
 printf("\n Server: close()...");
   
 close(server_socket);
 close(neuer_socket);
   
 printf("\n Serverprogramm beendet\n\n");
 return(0);
}
 
Ich glaube, dein Problem ist, dass du den Buffer direkt als String ausgeben willst. Das kannst du in ca. 100% aller Fälle nicht so machen. Die einkommenden Daten sind a) zerstückelt, also nicht die Pakete, wie sie losgeschickt werden und b) bestimmt nicht null-terminiert.

Du solltest den Inhalt des Buffers am besten hexadezimal ausgeben, Byte für Byte.
 
Zurück