2010-10-14 6 views
1

Dans un côté j'ai un ints écrire client Java dans son outputstream:readInt() de Java équivalent en C?

int a = 20; 
dataout.writeInt(a); 
dataout.flush(); 

De l'autre côté, j'ai un serveur C écoutant la connexion:

int client = accept(...); 

Comment lire l'int envoyé par Java?

Si j'avais un serveur Java, je pourrais facilement écrire:

int a = dataIn.readInt(); 

Comment faire cela en C?

grâce

+1

Dépendra de l'endianess du serveur. – sje397

Répondre

1

Lire dans un char buffer et utiliser atoi() pour convertir la chaîne en un int.

+0

en supposant un nombre entier de 4 octets, est-ce que vous voulez dire? char buf [4]; lu (client, buf, 4); int entier = atoi (buf); –

+0

Pas tout à fait - si le serveur Java envoie l'Int en quatre octets, tout va devenir beaucoup plus compliqué car vous devez savoir exactement dans quel ordre d'octets l'Int est envoyé. Je voudrais essayer d'envoyer Int en tant que chaîne, utiliser un tampon un peu plus grand (16 octets en haut) pour stocker la chaîne, puis utiliser atoi comme vous l'avez suggéré. Si vous envoyez l'Int en tant que représentation en octets, je la convertirais en ordre de byte réseau avant de l'envoyer et de la convertir en ordre d'hôte une fois que vous l'auriez reçu, sinon vous serez dans un monde de bogues vraiment bizarres. –

+0

atoi n'a pas de gestion des erreurs, atoi ("0") == atoi ("blah"); mieux vous utilisez strtol – user411313

0

Vous pouvez utiliser la fonction de lecture, mais vous devez faire attention à consommer des caractères sizeof (int) à partir de la socket et vous devez vous inquiéter de l'endianess.

0

fscanf devrait fonctionner si vous ne me dérange pas d'envoyer en texte clair:

fscanf(dataIn, "%d", &a); 

règles de texte simple :-) juste être sûr d'envoyer un « \ n » (ou quelque chose pas un chiffre) de la source avant la chasse.