/ Forside/ Teknologi / Udvikling / C/C++ / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn 

Kodeord  


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
c++
Fra : pcboy
Vist : 487 gange
100 point
Dato : 23-11-03 14:52

Hej jeg fandt en artitel med winsock i c programering på http://www.udvikleren.dk/article.php?aid=78&techid=1 og fandt ud af at med det kunne man programere netværk programmer og så tænkte jeg på om man mon også kunne lære at programmere winsock til c++ er der nogle der ved om man kan det og hvor der er nogle gode guider til det de må godt være på engelsk men hvis de kan findes på dansk vil jeg hellere have det.

Hilsen Pcboy

 
 
Kommentar
Fra : BertelBrander


Dato : 23-11-03 20:03

Man (de fleste) kan lære at programere med scokets i C eller C++, men hvis man ikke har prøvet at programere i C++ før, er det nok ikke lige det man skal starte med.

Har du erfaring med C/C++? Har du en kompiler?

Er der noget bestemt du vil med dine sockets?

Jeg har ikke nogen links til guider, men kan sikkert godt støve nogen op, hvis det har interesse.

Kommentar
Fra : pcboy


Dato : 24-11-03 07:05

Jeg fandt jo en guide til c men jeg programmere i c++ og har en compiler til det.

Hilsen pcboy

Kommentar
Fra : pcboy


Dato : 24-11-03 07:18

jeg vil gerne lære at lave netværks programmer f.eks hvor den kan bruge porte og sådan noget.

Kommentar
Fra : BertelBrander


Dato : 24-11-03 19:42

En C++ compiler kan også kompile C kode.

De "rå" funktioner er skrevet i C, nogle C++ kompilere laver "wrapper" class'er til sockets, Microsoft Visual C++ har f.ex. CSocket.

Du kan starte med at lave et program til at hente en side fra internettet.
Jeg kan godt finde et eksempel hvis det har interesse, men så skal jeg helst vide hvilken kompiler du bruger.

Kommentar
Fra : pcboy


Dato : 25-11-03 13:52

Hej BertelBrander
Jeg vil hellere end gerne have lidt jeg kan starte med jeg bruger denne compiler Bloodshed Dev-C++ 4.0 som jeg har downloadet fra:
http://download.com.com/3000-2069-1683220.html?tag=lst-0-1

Hilsen Pcboy

Kommentar
Fra : BertelBrander


Dato : 25-11-03 23:35

Dev-C++ er ikke en kompiler, det er en editor der normalt bruger MinGW til at kompile med.

Jeg har modificeret noget kode som jeg fandt her: http://www.eksperten.dk/spm/275501

Jeg kan kompilere koden med cygwin (en anden gcc til windows), så jeg forventer at det vil kompile med mingw også.

Koden henter en side fra internettet (i dette tilfælde www.jubii.dk) og udskriver den til skærmen.

I Dev-C++ skal du lave det som et konsol program. Du bør gemme koden i en .C-fil (ikke .CPP).

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <netdb.h>
#include <errno.h>

#define TIMEOUT 15 /* Sec */

char cmd[1024]; /* Kommando buffer */
char resp[102400]; /* Vores side havner i denne buffer */

void get(char *hostname, int port, char *path)
{
int sd, status, len, ix, tmp;
struct sockaddr local,remote;
struct hostent *hostinfo;
fd_set ReadSet;
struct timeval Time;

/* create socket */
sd = socket(AF_INET, SOCK_STREAM, 0);
if(sd < 0)
{
printf("Error creating socket: %s\n",strerror(errno));
return;
}

/* bind socket */
local.sa_family = AF_INET;
memset(local.sa_data, 0, sizeof(local.sa_data));
status = bind(sd, &local, sizeof(local));

if(status < 0)
{
printf("Error binding socket: %s\n",strerror(errno));
close(sd);
return;
}
/* lookup host */
hostinfo = gethostbyname(hostname);
if(!hostinfo)
{
printf("Error looking up host: %s\n",hostname);
close(sd);
return;
}

/* connect to host */
remote.sa_family = hostinfo->h_addrtype;
memcpy(remote.sa_data + 2, hostinfo->h_addr_list[0], hostinfo->h_length);
*((short *)remote.sa_data) = port;

tmp = remote.sa_data[0];
remote.sa_data[0] = remote.sa_data[1];
remote.sa_data[1] = tmp;
status = connect(sd, &remote, sizeof(remote));

if(status != 0)
{
printf("Error connecting to host: %s port: %d\n", hostname, port);
close(sd);
return;
}
/* send GET request */
sprintf(cmd, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", path, hostname);

status = send(sd, cmd, strlen(cmd), 0);
if(status < 0)
{
printf("Error sending POST request\n");
close(sd);
return;
}
/* read response */
ix = 0;
memset(&ReadSet, 0, sizeof(ReadSet));
FD_SET(sd, &ReadSet);
Time.tv_sec = TIMEOUT;
Time.tv_usec = 0;
len = 1;

while(len > 0 && select(sd + 1, &ReadSet, 0, 0, &Time) > 0)
{
len = recv(sd, resp + ix, sizeof(resp) - ix - 1, 0);
ix += len;
Time.tv_sec = TIMEOUT;
Time.tv_usec = 0;
}
resp[ix] = 0;

printf("%s", resp);

close(sd);
return;
}

int main(void)
{
get("www.jubii.dk", 80, "/");

return 0;
}

Kommentar
Fra : pcboy


Dato : 26-11-03 07:11

Den gidder ikke virke men ved du ikke hvor jeg kan skaffe en kompiler der kan bruges til det???
Den skal helst ikke fylde for meget jeg har langsomt internet.

Hilsen Pcboy

Kommentar
Fra : pcboy


Dato : 26-11-03 07:19

Sejt jeg sad lige og kiggede på koden og jeg tænkte at hvis man kan kontakte port 80 så burte man også kunne kontakte port 25 og lave en mail sender. Ved du om du kan finde en guide til det???

Hilsen Pcboy

Kommentar
Fra : BertelBrander


Dato : 26-11-03 21:14

Hvad mener du med at "den ikke gidder virke"? MinGW/Dev-C++ burde kunne bruges.

Jeg har lagt et komplet project her:

http://home20.inet.tele.dk/midgaard/getpage.zip

Du åbner blot projektet i Dev-C++ (eller dobbelt klikker på GetPage.dev). I Dev-C++ trykker du på F9, så skulle den gerne kompile, linke, køre programmet og hente siden.

Jeg ved ikke hvordan man laver et program til at sende mail's, men jeg tror at det er noget mere indviklet end at hente en side fra internettet. Jeg kender heller ikke nogen guider , det er vist ikke noget man lige laver en hurtig guide til.

Kommentar
Fra : pcboy


Dato : 27-11-03 07:03

Min kompiler siger at der ikke er en header der hedder #include <sys/socket.h> og heller ikke denne header #include <netdb.h> måske kan min kompiler ikke lave det ved du ikke hvor jeg kan finde en ordenlig kompiler???

Hilsen Pcboy

Kommentar
Fra : pcboy


Dato : 27-11-03 07:07

altså kompileren skriver:

c:\windows\skrive~1\cprogr~1\hjemme~1\main.c:6: sys\socket.h: No such file or directory
c:\windows\skrive~1\cprogr~1\hjemme~1\main.c:8: netdb.h: No such file or directory

bare for at vise hvad den helt rigtigt skriver.

Kommentar
Fra : BertelBrander


Dato : 28-11-03 00:28

Du kan downloade BorlandC fra: http://www.borland.com/products/downloads/download_cbuilder.html

Vælg "Compiler 5.5 windows."

Det er en kommando linie kompiler og intet andet, men en meget god kompiler.

Så skal du bruge følgende lidt modificerede udgave af koden. Kompiler den ved at skrive "bcc32 download.c" i en kommando prompt, hvor download.c er navnet på c-filen hvori du har gemt koden. Så kommer programmet til at hedde download.exe.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <windows.h>

#define TIMEOUT 15 /* Sec */

char cmd[1024]; /* Kommando buffer */
char resp[102400]; /* Vores side havner i denne buffer */

void get(char *hostname, short port, char *path)
{
int sd, status, len, ix, tmp;
struct sockaddr local,remote;
struct hostent *hostinfo;
fd_set ReadSet;
struct timeval Time;


/* create socket */
sd = socket(AF_INET, SOCK_STREAM, 0);
if(sd == INVALID_SOCKET)
{
printf("Error creating socket: %d\n", WSAGetLastError());
return;
}

/* bind socket */
local.sa_family = AF_INET;
memset(local.sa_data, 0, sizeof(local.sa_data));
status = bind(sd, &local, sizeof(local));

if(status == INVALID_SOCKET)
{
printf("Error binding socket: %d\n", WSAGetLastError());
closesocket(sd);
return;
}
/* lookup host */
hostinfo = gethostbyname(hostname);
if(!hostinfo)
{
printf("Error looking up host: %s\n", hostname);
closesocket(sd);
return;
}

/* connect to host */
remote.sa_family = hostinfo->h_addrtype;
memcpy(remote.sa_data + 2, hostinfo->h_addr_list[0], hostinfo->h_length);
*((short *)remote.sa_data) = port;

tmp = remote.sa_data[0];
remote.sa_data[0] = remote.sa_data[1];
remote.sa_data[1] = (char )tmp;
status = connect(sd, &remote, sizeof(remote));

if(status != 0)
{
printf("Error connecting to host: %s port: %d\n", hostname, port);
closesocket(sd);
return;
}
/* send GET request */
sprintf(cmd, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", path, hostname);

status = send(sd, cmd, strlen(cmd), 0);
if(status < 0)
{
printf("Error sending POST request\n");
closesocket(sd);
return;
}
/* read response */

ix = 0;
memset(&ReadSet, 0, sizeof(ReadSet));
FD_SET(sd, &ReadSet);
Time.tv_sec = TIMEOUT;
Time.tv_usec = 0;

len = 1;
while(len > 0 && select(sd + 1, &ReadSet, 0, 0, &Time) > 0)
{
len = recv(sd, resp + ix, sizeof(resp) - ix - 1, 0);
ix += len;
Time.tv_sec = TIMEOUT;
Time.tv_usec = 0;
}
resp[ix] = 0;

printf("\n%s", resp);

closesocket(sd);
return;
}

int main(void)
{
WORD version = MAKEWORD(1, 1);
WSADATA wsaData;
WSAStartup(version, &wsaData);

get("www.jubii.dk", 80, "/");

printf("Hit Enter to quit\n");
getchar();
WSACleanup();
return 0;
}

Kommentar
Fra : pcboy


Dato : 02-12-03 07:21

Det virkede ikke den sagde at der var 27 fejl eller sådan noget men jeg kan da begynde på delphi i stedet der kan man jo også lave netværks programmer og der har jeg allerede kompileren og lidt affaring men ved i hvor jeg kan finde nogle gode guider til netværks programmering i delphi min kompiler er Borland Delphi 6

Hilsen Pcboy

Kommentar
Fra : BertelBrander


Dato : 02-12-03 21:04

Hvilken "den" siger at der er hvilke fejl?

Du har følgende muligheder
Dette spørgsmål er blevet annulleret, det er derfor ikke muligt for at tilføje flere kommentarer.
Søg
Reklame
Statistik
Spørgsmål : 173641
Tips : 31664
Nyheder : 719565
Indlæg : 6383649
Brugere : 218258

Månedens bedste
Årets bedste
Sidste års bedste