janmulder13
Gebruiker
- Lid geworden
- 15 sep 2009
- Berichten
- 43
Hallo,
Ik heb een probleem met socket programmeren. Ik programmeer veel voor de Nintendo DS (in C) en ik probeer nu om een verbinding via WiFi naar een ander Nintendo DS systeem te leggen. Dit probeer ik te doen via mijn eigen computer door daar weer een programmaatje op te laten draaien (ik dacht dat het zo moest, ik weet het niet zeker).
Dit is wat ik in dat programmaatje heb staan:
het compileert zonder fouten. Wat ik dus eigenlijk wilde doen is connect()en met de Nintendo DS naar het IP adres van mijn computer + de poort die ik invul. Zodat het programmaatje dat dan weer naar de andere spelers kan doorsturen.
De Nintendo DS geeft echter een fout aan in connect() (na socket() en bind()). 'errno' is gelijk aan 113 ("no route to host"). Ik dacht dat dit misschien aan de poort zou liggen, maar het zou ook zomaar iets anders kunnen zijn.
Zijn er hier mensen met verstand van dit soort dingen?
Alvast bedankt,
Jan.
PS: Ja, ik weet dat het niet zo heel efficient geprogrammeerd is, maar ik wil misschien nog meer dan 2 spelers toe gaan laten.
Ik heb een probleem met socket programmeren. Ik programmeer veel voor de Nintendo DS (in C) en ik probeer nu om een verbinding via WiFi naar een ander Nintendo DS systeem te leggen. Dit probeer ik te doen via mijn eigen computer door daar weer een programmaatje op te laten draaien (ik dacht dat het zo moest, ik weet het niet zeker).
Dit is wat ik in dat programmaatje heb staan:
Code:
#include <cstdlib>
#include <iostream>
#include <WinSock.h>
#include <wininet.h>
#include <stdio.h>
#include <string.h>
char *getwebpage(char *hostname, char *uri, unsigned long *total)
{
if(!hostname || !uri || !total) return (char *)0;
*total = 0;
char *headers1 = "Accept: text/html, */*\nAccept-Language: en-gb\nAccept-Encoding: none\nHost: ";
char *headers2 = (char *)malloc(strlen(headers1) + strlen(hostname) + 2);
sprintf(headers2, "%s%s\n", headers1, hostname);
HINTERNET session = InternetOpen("Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
HINTERNET connect = InternetConnect(session, hostname, 80, "", "", INTERNET_SERVICE_HTTP, 0, 0);
HINTERNET http = HttpOpenRequest(connect, "GET", uri, HTTP_VERSION, NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
HttpSendRequest(http, headers2, strlen(headers2), NULL, 0);
free(headers2);
unsigned long read;
char buffer[1024];
char *final = (char *)malloc(1024);
memset(buffer, 0, 1024);
memset(buffer, 0, 1024);
while(InternetReadFile(http, buffer, 1024, &read) && (read != 0)){
CopyMemory((final + *total), buffer, read);
*total += read;
final = (char *)realloc(final, (*total + 1024));
memset((final + *total), 0, 1024);
}
InternetCloseHandle(http);
InternetCloseHandle(connect);
InternetCloseHandle(session);
return final;
}
int getmyipaddress(char *buffer)
{
unsigned long length;
char *webpage = getwebpage("www.ipchicken.com", "/", &length);
if(!webpage || length == 0) return 0;
int result = 0;
char *start = strstr(webpage, "<b>");
if(start){
start += 3;
while(*start <= ' ') start++;
char *end = start;
while(*end > ' ') end++;
*end = 0;
strcpy(buffer, start);
result = 1;
}
free(webpage);
return result;
}
using namespace std;
#define MIJNPOORT 8888
int main(void) {
char IPAddr[15];
getmyipaddress(IPAddr);
cout << "IP: " << IPAddr << "\n";
char players;
char cplay[5];
int sock[2] = {-1,-1};
int eigensock;
struct sockaddr_in Zelf, Ander[2];
Zelf.sin_family = AF_INET;
Zelf.sin_port = htons(MIJNPOORT);
Zelf.sin_addr.s_addr = inet_addr(IPAddr);
memset(&(Zelf.sin_zero),'\0',8);
eigensock = socket(AF_INET, SOCK_STREAM, 0);
itoa(ntohs(Zelf.sin_port),cplay,10);
cout << "Port: " << cplay << "\n";
cout << "created a socket\n";
bind(eigensock, (struct sockaddr *)&Zelf, sizeof(struct sockaddr));
cout << "binded\n";
char count1 = 0;
char count2 = 0;
int size;
int len = 0;
char buffer[512];
while (true) {
listen(eigensock, 20);
size = sizeof(struct sockaddr_in);
sock[players] = accept(eigensock, (struct sockaddr *)&Ander[players], &size);
if (sock[players] >= 0) {
players++;
itoa(players,cplay,10);
cout << "accepted " << cplay << " players\n";
}
for(count1=0;count1<players;count1++) {
len = recv(sock[count1],buffer,512,0);
if (len == 0) {
players = 0;
sock[0] = -1;
sock[1] = -1;
cout << "disconnected\n";
}
for(count2=0;count2<players;count2++) {
if (count2 != count1) send(sock[count2],buffer,len,0);
}
}
}
return 0;
}
het compileert zonder fouten. Wat ik dus eigenlijk wilde doen is connect()en met de Nintendo DS naar het IP adres van mijn computer + de poort die ik invul. Zodat het programmaatje dat dan weer naar de andere spelers kan doorsturen.
De Nintendo DS geeft echter een fout aan in connect() (na socket() en bind()). 'errno' is gelijk aan 113 ("no route to host"). Ik dacht dat dit misschien aan de poort zou liggen, maar het zou ook zomaar iets anders kunnen zijn.
Zijn er hier mensen met verstand van dit soort dingen?
Alvast bedankt,
Jan.
PS: Ja, ik weet dat het niet zo heel efficient geprogrammeerd is, maar ik wil misschien nog meer dan 2 spelers toe gaan laten.
Laatst bewerkt: