/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
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
Socket eksempel virker ikke
Fra : FePe


Dato : 18-01-04 18:35

Har lige læst om sockets i info-manualen for libc, og deri er der et
eksempel, som jeg ikke kan få til at virke. Koden følger herunder:

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

#define PORT      5555
#define MESSAGE      "Just a small message."
#define SERVERHOST   "gnu.org"

void write_to_server(fd)
int      fd;
{
int nbytes;

printf("writing...\n");
nbytes = write(fd, MESSAGE, strlen(MESSAGE) + 1);
if (nbytes < 0)
{
   perror("write");
   exit(EXIT_FAILURE);
}
printf("data written...\n");
}

void init_sockaddr(name, hostname, port)
struct sockaddr_in   *name;
const char      *hostname;
uint16_t      port;
{
struct hostent *hostinfo;

name->sin_family = AF_INET;
name->sin_port = htons(port);

hostinfo = gethostbyname(hostname);

if (hostname == NULL)
{
   fprintf(stderr, "Unknown host %s.\n", hostname);
   exit(EXIT_FAILURE);
}

name->sin_addr = *(struct in_addr *)hostinfo->h_addr;
}

int main(void)
{
int sock;
struct sockaddr_in servername;

/* Create the socket. */
sock = socket(PF_INET, SOCK_STREAM, 0);
if (sock < 0)
{
   perror("socket (client)");
   exit(EXIT_FAILURE);
}

/* Connect to the server. */
init_sockaddr(&servername, SERVERHOST, 0);
if (connect(sock, (struct sockaddr *) &servername, sizeof(servername)) < 0)
{
   perror("connect (client)");
   exit(EXIT_FAILURE);
}

/* Send data to the server. */
write_to_server(sock);
close(sock);
exit(EXIT_SUCCESS);
}

Jeg har ikke sat mig forfærdeligt godt ind i emnet, men burde
eksemplet i manualen ikke virke, når det nu står i en manual?

Mvh. FePe
--
Theorem: a cat has nine tails.
Proof:
No cat has eight tails. A cat has one tail more than no cat.
Therefore, a cat has nine tails.

 
 
Rasmus Christian Kaa~ (18-01-2004)
Kommentar
Fra : Rasmus Christian Kaa~


Dato : 18-01-04 20:05

FePe wrote:
> Har lige læst om sockets i info-manualen for libc, og deri er der et
> eksempel, som jeg ikke kan få til at virke. Koden følger herunder:

....

> Jeg har ikke sat mig forfærdeligt godt ind i emnet, men burde
> eksemplet i manualen ikke virke, når det nu står i en manual?


Hvordan ser fejlen ud? Du har kun cutnpastet noget kode.


FePe (18-01-2004)
Kommentar
Fra : FePe


Dato : 18-01-04 21:04

Rasmus Christian Kaae wrote:

> FePe wrote:
> > Har lige læst om sockets i info-manualen for libc, og deri er der et
> > eksempel, som jeg ikke kan få til at virke. Koden følger herunder:
>
> ...
>
> > Jeg har ikke sat mig forfærdeligt godt ind i emnet, men burde
> > eksemplet i manualen ikke virke, når det nu står i en manual?
>
> Hvordan ser fejlen ud? Du har kun cutnpastet noget kode.

Der sker simpelthen ingenting. Ellers skriver den "connection refused"
eller noget i den stil.

Mvh. FePe
--
Theorem: a cat has nine tails.
Proof:
No cat has eight tails. A cat has one tail more than no cat.
Therefore, a cat has nine tails.


Jacob Bunk Nielsen (18-01-2004)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 18-01-04 21:17

FePe <fepe@SLETtiscali.dk> writes:

> Der sker simpelthen ingenting. Ellers skriver den "connection refused"
> eller noget i den stil.

Er du sikker på at programmet forsøger at forbinde sig til en maskine,
hvor der er noget der lytter på den pågældende port?

Såvidt jeg kan se forsøger dit program at forbinde sig til port
5555/tcp på gnu.org. Mit gæt er at der ikke er noget der lytter der,
hvilket vil give "connection refused".

--
Jacob - www.bunk.cc
Must be getting close to town -- we're hitting more people.

FePe (19-01-2004)
Kommentar
Fra : FePe


Dato : 19-01-04 07:11

Jacob Bunk Nielsen wrote:

> Såvidt jeg kan se forsøger dit program at forbinde sig til port
> 5555/tcp på gnu.org. Mit gæt er at der ikke er noget der lytter der,
> hvilket vil give "connection refused".

Det har du nok ret i, men hvad skal man så bruge?

Mvh.
--
_ __ _ __
| | __ | | | __
| |__ | _|| |__| | _|
|_| |__ |_| |___|



Rasmus Christian Kaa~ (19-01-2004)
Kommentar
Fra : Rasmus Christian Kaa~


Dato : 19-01-04 13:29

FePe wrote:
> Jacob Bunk Nielsen wrote:
>
>
>>Såvidt jeg kan se forsøger dit program at forbinde sig til port
>>5555/tcp på gnu.org. Mit gæt er at der ikke er noget der lytter der,
>>hvilket vil give "connection refused".
>
>
> Det har du nok ret i, men hvad skal man så bruge?

Hvad med www.example.org port 80?


Nicolai Hansen (19-01-2004)
Kommentar
Fra : Nicolai Hansen


Dato : 19-01-04 13:50

FePe <fepe@SLETtiscali.dk> wrote in message news:<400B7508.81055D81@SLETtiscali.dk>...
> Jacob Bunk Nielsen wrote:
>
> > Såvidt jeg kan se forsøger dit program at forbinde sig til port
> > 5555/tcp på gnu.org. Mit gæt er at der ikke er noget der lytter der,
> > hvilket vil give "connection refused".
>
> Det har du nok ret i, men hvad skal man så bruge?
>
> Mvh.

Der er sikkert et tilsvarende "server" eksempel i næste kapitel :)
Dem ku du prøve at få til at snakke sammen

FePe (19-01-2004)
Kommentar
Fra : FePe


Dato : 19-01-04 18:40

Nicolai Hansen wrote:

> Der er sikkert et tilsvarende "server" eksempel i næste kapitel :)
> Dem ku du prøve at få til at snakke sammen

Ja, det er der, og det vil jeg også prøve, når jeg eksperimenterer med det næste gang.

Tak for alle svarene!

Mvh. FePe.
--
Theorem: a cat has nine tails.
Proof:
No cat has eight tails. A cat has one tail more than no cat.
Therefore, a cat has nine tails.


Nicolai Hansen (19-01-2004)
Kommentar
Fra : Nicolai Hansen


Dato : 19-01-04 21:51

> > Der er sikkert et tilsvarende "server" eksempel i næste kapitel :)
> > Dem ku du prøve at få til at snakke sammen
>
> Ja, det er der, og det vil jeg også prøve, når jeg eksperimenterer med det
næste gang.

Jeg er go til at gætte :)
Prøv at køre begge programmer og se om de kan få forbindelse.
Hvis du ikke ved det i forvejen: IP adresse 127.0.0.1 er din egen maskine.





Jacob Bunk Nielsen (19-01-2004)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 19-01-04 11:14

FePe <fepe@SLETtiscali.dk> writes:
> Jacob Bunk Nielsen wrote:
>
>> Såvidt jeg kan se forsøger dit program at forbinde sig til port
>> 5555/tcp på gnu.org. Mit gæt er at der ikke er noget der lytter der,
>> hvilket vil give "connection refused".
>
> Det har du nok ret i, men hvad skal man så bruge?

Et eller andet hvor der er et serverprogram der gider at høre på det
fnidder du sender den. Det kan du fx selv skrive og køre på din egen
maskine.

Du kan også prøve at starte et tilfældigt serverprogram der følger med
dit system, og så prøve at forbinde til det. Det vil dog næppe få
noget meningsfuldt ud af det du sender det, men så kan du da se at du
ikke får "connection refused", men måske en anden fejl.

--
Jacob - www.bunk.cc
Never tell a lie unless it is absolutely convenient.

Nicolai Hansen (19-01-2004)
Kommentar
Fra : Nicolai Hansen


Dato : 19-01-04 06:56

"FePe" <fepe@SLETtiscali.dk> skrev i en meddelelse
news:m3ektxjh3l.fsf@kenny.kenny.org...
> Har lige læst om sockets i info-manualen for libc, og deri er der et
> eksempel, som jeg ikke kan få til at virke. Koden følger herunder:
>
> #include <stdio.h>
> #include <errno.h>
> #include <stdlib.h>
> #include <unistd.h>
> #include <sys/types.h>
> #include <sys/socket.h>
> #include <netinet/in.h>
> #include <netdb.h>
>
> #define PORT 5555
> #define MESSAGE "Just a small message."
> #define SERVERHOST "gnu.org"
>
> void write_to_server(fd)
> int fd;
> {
> int nbytes;
>
> printf("writing...\n");
> nbytes = write(fd, MESSAGE, strlen(MESSAGE) + 1);
> if (nbytes < 0)
> {
> perror("write");
> exit(EXIT_FAILURE);
> }
> printf("data written...\n");
> }
>
> void init_sockaddr(name, hostname, port)
> struct sockaddr_in *name;
> const char *hostname;
> uint16_t port;
> {
> struct hostent *hostinfo;
>
> name->sin_family = AF_INET;
> name->sin_port = htons(port);
>
> hostinfo = gethostbyname(hostname);
>
> if (hostname == NULL)
> {
> fprintf(stderr, "Unknown host %s.\n", hostname);
> exit(EXIT_FAILURE);
> }
>
> name->sin_addr = *(struct in_addr *)hostinfo->h_addr;
> }
>
> int main(void)
> {
> int sock;
> struct sockaddr_in servername;
>
> /* Create the socket. */
> sock = socket(PF_INET, SOCK_STREAM, 0);
> if (sock < 0)
> {
> perror("socket (client)");
> exit(EXIT_FAILURE);
> }
>
> /* Connect to the server. */
> init_sockaddr(&servername, SERVERHOST, 0);
> if (connect(sock, (struct sockaddr *) &servername, sizeof(servername))
< 0)
> {
> perror("connect (client)");
> exit(EXIT_FAILURE);
> }
>
> /* Send data to the server. */
> write_to_server(sock);
> close(sock);
> exit(EXIT_SUCCESS);
> }
>
> Jeg har ikke sat mig forfærdeligt godt ind i emnet, men burde
> eksemplet i manualen ikke virke, når det nu står i en manual?

Kører du linux eller windows? (læs: den eneste måde _jeg_ kender hvorpå du
kan få dit eksempel til at køre på Windows er ved at bruge cygwin)




N/A (19-01-2004)
Kommentar
Fra : N/A


Dato : 19-01-04 13:29



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409081
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste