Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
19 years ago

printf's problem under uclinux

I wrote a socket program like below:# include <sys/types.h># include <sys/socket.h># include <sys/ioctl.h># include <sys/time.h># include <netinet/in.h># include <arpa/inet.h># include <netdb.h># include <stdio.h># include <signal.h># include <unistd.h>

int main()

{

int sd;

struct sockaddr_in sin;

char buf[1024];

int n;

if((sd=socket(AF_INET,SOCK_STREAM,0))==-1)

{

perror("can&#39;t creat socket!");

exit(1);

}

printf("creat socket!");

sin.sin_family=AF_INET;

sin.sin_addr.s_addr=htonl("192.168.135.99");

sin.sin_port=htons(1989);

if(connect(sd,(void*)&sin,sizeof(sin))==-1)

{

perror("can&#39;t connect!");

exit(1);

}

printf("connect socket!");

printf("input a message:\n");

fgets(buf,sizeof(buf),stdin);

if((n=send(sd,buf,sizeof(buf),0))==-1)

{

perror("can&#39;t send message!");

exit(1);

}

if((n=recv(sd,buf,sizeof(buf),0))==-1)

{

perror("receive error!");

exit(1);

}

printf("response from server:%s",buf);

close(sd);

}

when I run it under uclinux, the printf can&#39;t work because I can&#39;t get any message

in the sdk.

Can anyone help me ?

Thank you.

4 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    You can NOT use SDK/HAL API for uClinux.

    Search this forum, and you may find some socket prog examples.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    by the way

     sin.sin_addr.s_addr=htonl("192.168.135.99");

    cannot work.

    replace it:

     sin.sin_addr.s_addr=inet_addr("192.168.135.99");

    there are tons of examples in the internet....
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    thank you for all your help.

    now the printf can run,but my server program and client program can&#39;t run normally.it says:can&#39;t connect!:connection refused!

    my server.c and client.c are like below.

    client.c:# include <sys/types.h># include <sys/socket.h># include <sys/ioctl.h># include <sys/time.h># include <netinet/in.h># include <arpa/inet.h># include <netdb.h># include <stdio.h># include <signal.h># include <unistd.h>

    int main()

    {

    int sd;

    struct sockaddr_in sin;

    char buf[1024];

    int n;

    if((sd=socket(AF_INET,SOCK_STREAM,0))==-1)

    {

    perror("can&#39;t creat socket!");

    exit(1);

    }

    sin.sin_family=AF_INET;

    sin.sin_addr.s_addr=inet_addr("192.168.135.99");//the server ip

    sin.sin_port=htons(7777);

    if(connect(sd,(void*)&sin,sizeof(sin))==-1)

    {

    perror("can&#39;t connect!");

    exit(1);

    }

    printf("input a message:\n");

    fgets(buf,sizeof(buf),stdin);

    if((n=send(sd,buf,sizeof(buf),0))==-1)

    {

    perror("can&#39;t send message!");

    exit(1);

    }

    if((n=recv(sd,buf,sizeof(buf),0))==-1)

    {

    perror("receive error!");

    exit(1);

    }

    printf("response from server:%s",buf);

    close(sd);

    }

    *****************************************************

    the server.c :# include <sys/types.h># include <sys/socket.h># include <sys/ioctl.h># include <sys/time.h># include <netinet/in.h># include <arpa/inet.h># include <netdb.h># include <stdio.h># include <signal.h># include <unistd.h>

    # define max 1024

    int main ()

    {

    int sd,cd;

    int slen,clen;

    struct sockaddr_in sin,cin;

    char buf[max];

    int i,n;

    if((sd=socket(AF_INET,SOCK_STREAM,0))==-1)

    {

    perror("can&#39;t creat socket!");

    exit(1);

    }

    sin.sin_family=AF_INET;

    sin.sin_addr.s_addr=inet_addr(INADDR_ANY);

    sin.sin_port=htons(7777);

    slen=sizeof(sin);

    clen=sizeof(cin);

    if(bind(sd,(struct sockaddr*)&sin,slen)==-1)

    {

    perror("bind error!");

    exit(1);

    }

    if(listen(sd,20)==-1)

    {

    perror("listen error!");

    exit(1);

    }

    printf("waiting for connections from clients!\n");

    if((cd=accept(sd,(struct sockaddr*)&cin,&clen))==-1)

    {

    perror("accept error!");

    exit(1);

    }

    if((n=recv(cd,buf,sizeof(buf),0))<0)

    {

    perror("receive error!");

    exit(1);

    }

    printf("received from the client:IP:%d port:%d %s\n",

    ntohl(cin.sin_addr.s_addr),ntohs(cin.sin_port),buf);

    for(i=0;i<=n;i++) buf=toupper(buf);

    if((n=send(cd,buf,n,0))<0)

    {

    perror("send error!");

    exit(1);

    }

    close(cd);

    }

    ********************************************************

    Is there any wrong?

    thank you.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    in replace in your server code

     sin.sin_addr.s_addr=inet_addr(INADDR_ANY);

    with

     sin.sin_addr.s_addr=INADDR_ANY;