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