/ 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
En lille telnet client
Fra : Heine Laursen


Dato : 22-06-02 18:26

Hejsa NG.

Så har 'jeg' forsøgt mig med lidt socket programmering. Og efter div
tutorials og lån af kode fra disse, er resultatet overvelene.
Jeg ka få oprettet en forbindelse. Og modtage start beskeden

Og da overveldelsen så gik over, idså jeg at mit program har forskellige
mangler. Det er ikke muligt at se outputet af start beskeden. Der
bliver bare printet utydlige tegn ud. Se bare her:

[heine@BadAssMachine socket]$./a.out grex.org
Hostname grex.org found
Socket Connected
connection acepted

ÿýÿý ÿý#ÿý'ÿý$
>

Et andet problem er at jeg ikke kan finde ud af at programmere mig ud
af en do while lykke. Med andre ord. når jeg trykker 'q' og enter så
afsluttes programmet ikke! Jeg kan kun afbryde med C-c

Jeg forsøger at programmere C under linux.

Her er 'min' kode:

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

#define MAXDATASIZE 1000

int main(int argc,char *argv[])
{

int create_socket, numbytes, i=0;
int port_nr = 23;
struct hostent *he;
struct sockaddr_in their_addr;
char buf[MAXDATASIZE], indput[MAXDATASIZE];

if (argc != 2)
{
fprintf(stderr,"usage: client hostname\n");
exit(1);
}
if ((he=gethostbyname(argv[1])) == NULL)
{
perror("gethostbyname");
exit(1);
}
else
printf("Hostname %s found \n", *he);

if ((create_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket");
exit(1);
}
else
printf("Socket Connected\n");

their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(port_nr);
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
memset(&(their_addr.sin_zero), '\0', 8);

if (connect(create_socket, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1)
{
perror("connect");
exit(1);
}
else
printf("connection acepted \n");

do
{
if ((numbytes=recv(create_socket, buf, MAXDATASIZE-1, 0)) == -1)
   {
    perror("recv");
    close(create_socket);
    exit(1);
   }
else
   printf("\n%s", buf);
printf("\n>");
scanf("%s", &indput);
if ((numbytes==send(create_socket, indput, MAXDATASIZE-1, 0)) == -1)
   {
    perror("send");
    close(create_socket);
    exit(1);
   }

else
   printf("Send %s", indput);

}
while (indput != 'q');

close(create_socket);
return 0;
}

--
Mvh
Heine Laursen


 
 
Kent Friis (22-06-2002)
Kommentar
Fra : Kent Friis


Dato : 22-06-02 18:39

Den 22 Jun 2002 17:25:50 GMT skrev Heine Laursen:
>Hejsa NG.
>
>Så har 'jeg' forsøgt mig med lidt socket programmering. Og efter div
>tutorials og lån af kode fra disse, er resultatet overvelene.
>Jeg ka få oprettet en forbindelse. Og modtage start beskeden
>
>Og da overveldelsen så gik over, idså jeg at mit program har forskellige
>mangler. Det er ikke muligt at se outputet af start beskeden. Der
>bliver bare printet utydlige tegn ud. Se bare her:
>
>[heine@BadAssMachine socket]$./a.out grex.org
>Hostname grex.org found
>Socket Connected
>connection acepted
>
>ÿýÿý ÿý#ÿý'ÿý$

Det er sikkert bare telnet-protokollen der er på spil. Prøv at bruge
ftp, pop3 eller smtp i stedet for - de er plain-text hele vejen igennem.

>Et andet problem er at jeg ikke kan finde ud af at programmere mig ud
>af en do while lykke. Med andre ord. når jeg trykker 'q' og enter så
>afsluttes programmet ikke! Jeg kan kun afbryde med C-c

>
> int create_socket, numbytes, i=0;
> int port_nr = 23;

Prøv 21 (ftp), 25 (smtp) eller 110 (pop3) i stedet for.

> char buf[MAXDATASIZE], indput[MAXDATASIZE];

Du definerer et array af chars.

> }
> while (indput != 'q');

Som du sammenligner med en enkelt char. Det skal gå galt. Enten skal du
bruge indput[0], eller du skal søge hele array'et igennem efter et q,
det afhænger af hvordan dit program virker (og det ved du forhåbendlig
bedst).

Mvh
Kent
--
"Intelligence is the ability to avoid doing work, yet get the work done"
- Linus Torvalds

Heine Laursen (23-06-2002)
Kommentar
Fra : Heine Laursen


Dato : 23-06-02 12:43

In article <af2cn5$hsq$1@sunsite.dk>, Kent Friis wrote:
> Det er sikkert bare telnet-protokollen der er på spil. Prøv at bruge
> ftp, pop3 eller smtp i stedet for - de er plain-text hele vejen igennem.

Så virker det.

>> }
>> while (indput != 'q');
>
> Som du sammenligner med en enkelt char. Det skal gå galt. Enten skal du
> bruge indput[0], eller du skal søge hele array'et igennem efter et q,
> det afhænger af hvordan dit program virker (og det ved du forhåbendlig
> bedst).

Så kan jeg afslutte mit program.

Mange tak for hjælpen.

--
Mvh
Heine Laursen

Søg
Reklame
Statistik
Spørgsmål : 177496
Tips : 31968
Nyheder : 719565
Indlæg : 6408491
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste