Connexion TCP avec serveur ...

respawnrespawn Membre
11:13 modifié dans API AppKit #1
Bonjour à  tous, voici mon problème.

J'adapte actuellement un programme serveur C en Obj-C. J'ai besoin d'envoyer des sockets vers un autre programme C, destiné à  une carte (donc pas possible de le changer).

Voici des extraits de mon code original en C que je souhaiterai adapter :
<br />struct set_led_request {<br />	int kind;<br />	int id_led;<br />	int status;<br />	};<br /><br />struct answer {<br />&nbsp; &nbsp; int ack;<br />	struct set_led_request led_request;<br />	};<br /><br /><br />int new_socket;<br />	int connected_socket;<br />	char request[100];<br />	struct sockaddr_in sins;<br />	struct hostent *sp;<br />	<br />	sins.sin_family=PF_INET;<br />	sins.sin_port=htons(port);<br />	<br />	new_socket = socket(PF_INET,SOCK_STREAM,0);<br />	<br />	if (new_socket == -1) {<br />		printf(&quot;Creation of the socket failed&#092;n&quot;);<br />		return -1;}<br /><br />	sp=gethostbyname(serverhost);<br />	sins.sin_addr.s_addr=*(unsigned long*)(sp-&gt;h_addr_list[0]);<br /><br />	connected_socket = connect(new_socket, (struct sockaddr *) &amp;sins, sizeof(sins));<br /><br />struct set_led_request request;<br />	struct answer card_answer;<br />	<br />	request.kind = SET_LED;<br />	request.id_led = id_led;<br />	request.status = status;<br />	<br />	if (write(serverfd, &amp;request, sizeof(request)) == -1){<br />		printf(&quot;Impossible to write the request&#092;n&quot;);<br />		}<br />		<br />	read(serverfd, &amp;card_answer, sizeof(card_answer));<br />	<br />	check_answer(&amp;card_answer,connect_id,result);<br /><br />


J'ai regardé un peu, j'ai vu différents framework mais bon ... je souhaiterai rester assez simple. J'ai pensé pouvoir copier directement mon code C dans mon fichier, mais une simple ligne comme
struct sockaddr_in sins;
me donne une erreur pour la taille.

J'ai essayé le bout de code suivant
id server;<br />	NSSocketPort *s;<br />	NSFileHandle *fh;<br />	NSConnection *connection;<br />	<br />	s=[[NSSocketPort alloc] initRemoteWithTCPPort:12345 host:@&quot;localhost&quot;];<br />	fh=[[NSFileHandle alloc] initWithFileDescriptor:[s socket]];<br />	connection = [NSConnection connectionWithReceivePort:nil sendPort:s];<br />server = [connection rootProxy];


Mon programme tourne normalement, si j'enlève la dernière ligne, mais sinon, il plante...

Merci d'avance

Réponses

  • respawnrespawn Membre
    11:13 modifié #2
    j'essaie de recopier mon code C ligne par ligne, mais ca beug vite :

    dès la ligne
    struct sockaddr_in sins;
    
    j'ai une erreur qui me dit "error: storage size of 'sins' isn't known" ce que je comprends tout à  fait mais comment faire, sachant que les champs sont initialisés après
    sins.sin_family=PF_INET;<br />	sins.sin_port-=htons(12345);
    


    J'ai téléchargé les "framework" (c'est pas des framework comme d'habitude) OmniFramework et SmallSocket en prévision, mais j'ai l'impression que le requête que j'enverrai avec si je les utilise, ne sera pas reconnu par mon programme C les recevant ...


  • respawnrespawn Membre
    11:13 modifié #3
    Je continue de me répondre ... :)

    J'ai réussi à  recopier une partie de mon code C (il manquait simplement quelques librairies), mais je suis sur un os là  ...

    J'ai mis comme port d'envoi pour le serveur et d'écoute pour l'autre, 12345, lorsque je lance mes 2 programmes en C, tout marche, ils établissent bien la connexion. Par contre, quand le lance le programme C de la carte, et le nouveau en obj-c, le socket est créé mais pas de connection, connect() renvoie -1 ... comment cela se fait-il ?

    Peut-être pourrez-vous m'aider cette fois-ci ...
  • respawnrespawn Membre
    11:13 modifié #4
    Y a-t-il eu une étude qui prouve que lorsqu'on poste un problème sur un forum, on le résout 5 minutes après avoir valider le post ?

    Ca marche, une simple faute de frappe ...

    A plus tard  :P
  • AliGatorAliGator Membre, Modérateur
    11:13 modifié #5
    dans 1218623549:

    Y a-t-il eu une étude qui prouve que lorsqu'on poste un problème sur un forum, on le résout 5 minutes après avoir valider le post ?
    Je sais pas si y'a eu une étude, mais en tout cas ça s'est vérifié un sacré paquet de fois, tu n'es pas le seul à  qui c'est arrivé :)
    Limite faudrait se créer chacun un forum sur sa machine pour se poser des questions à  nous même et ainsi trouver la réponse ;) non, ça marcherait pas ? pffff :)
Connectez-vous ou Inscrivez-vous pour répondre.