#170434 - eglomer - Thu Sep 24, 2009 4:02 pm
Hi!
I'm trying to connect my DS to a C++ Server running under linux (ubuntu 9.04), but I have problems with the Connect function (it don't connect).
I try with a linux c++ client, and i have no problems, but with DS is imposible... T_T
DS main:
Client and Server source code for PC (linux with CodeBlocks): Download
Thank you!
I'm trying to connect my DS to a C++ Server running under linux (ubuntu 9.04), but I have problems with the Connect function (it don't connect).
I try with a linux c++ client, and i have no problems, but with DS is imposible... T_T
DS main:
Code: |
#include <nds.h>
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <fat.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <dswifi9.h> #define PORT 40000 // puerto al que vamos a conectar #define MAXDATASIZE 256 #define NORMAL_TCP 0 #define NONBLOCKING_TCP 1 int EGL_ConnectIP(int *sock, const char *IP, int port, int mode); int EGL_InitWifi(int debug); int main (int argc, char *argv[]){ // Variables int numbytes; char buf[MAXDATASIZE]="hello from DS"; // Inits consoleDemoInit(); while (EGL_InitWifi(1) == 0); int sock; if ( EGL_ConnectIP(&sock, "127.0.0.1", PORT, NONBLOCKING_TCP) ){ printf ("Conectado\n"); }else{ return 0; } // Send printf ("Enviando: "); send( sock, buf, strlen(buf), 0 ); printf ("enviado...\n"); // Receive printf ("Recibiendo: "); while ((numbytes=recv(sock, buf, MAXDATASIZE-1, 0)) != 0) { if (numbytes > 0){ buf[numbytes] = '\0'; } } printf("recibido...\n\n%s\n\n",buf); printf ("Cerrando socket: "); shutdown(sock,0); closesocket(sock); printf ("cerrado..."); return 0; } //-------------------------------------------------------------------------------------------------------------------------------------------- int EGL_ConnectIP(int *sock, const char *IP, int port, int mode){ //-------------------------------------------------------------------------------------------------------------------------------------------- int i = 0; struct sockaddr_in client; *sock = socket(AF_INET,SOCK_STREAM,0); if(*sock == -1 ){ printf("Error al crear socket\n"); return 0; }else printf("Socket creado\n"); client.sin_addr.s_addr = inet_addr(IP); client.sin_family = AF_INET; client.sin_port = htons(port); if ( mode == NORMAL_TCP ){ i = 0; printf ("Ajustado a NORMAL TCP\n"); }else if ( mode == NONBLOCKING_TCP ){ i = 1; printf ("Ajustado a NONBLOCKING TCP\n"); } ioctl(*sock, FIONBIO, &i); // set blocking or non-blocking if ( connect(*sock, (struct sockaddr *) &client, sizeof(client)) == 0 ) return 1; printf ("Imposible conectar al servidor\n"); return 0; } //-------------------------------------------------------------------------------------------------------------------------------------------- int EGL_InitWifi(int debug){ //-------------------------------------------------------------------------------------------------------------------------------------------- if(!Wifi_InitDefault(WFC_CONNECT)) { return 0; } else { if (debug == true){ struct in_addr ip, gateway, mask, dns1, dns2; ip = Wifi_GetIPInfo(&gateway, &mask, &dns1, &dns2); iprintf("ip : %s\n", inet_ntoa(ip) ); iprintf("gateway: %s\n", inet_ntoa(gateway) ); iprintf("mask : %s\n", inet_ntoa(mask) ); iprintf("dns1 : %s\n", inet_ntoa(dns1) ); iprintf("dns2 : %s\n", inet_ntoa(dns2) ); } return 1; } } |
Client and Server source code for PC (linux with CodeBlocks): Download
Thank you!