A sample chat Server and Client Under linux

上一篇 / 下一篇  2008-04-06 12:44:19

 

Client Part :

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

int main(int argc,char *argv[])
{
    
        int sockfd;
        char buffer[1024];
        struct sockaddr_in server_addr;
        struct hostent *host;
        int portnumber,nbytes;
        if(argc!=3)
     {
            printf("wrong 1");
            exit(1);
     }
        if((host=gethostbyname(argv[1]))==NULL)
     {
            printf("wrong 2");
            exit(1);
     }
        if((portnumber=atoi(argv[2])) <0)
     {
            printf("wrong 3");
            exit(1);
     }
        if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
     {
            printf("wrong 4");
            exit(1);
     }
        bzero(&server_addr,sizeof(server_addr));
        server_addr.sin_family=PF_INET;
        server_addr.sin_port=htons(portnumber);
        server_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
        printf("we are trying to connect \n");
        if(connect(sockfd,(struct sockaddr*)(&server_addr),sizeof(struct sockaddr))==-1)
     {
            fprintf(stderr,"Connect Error:%s\a\n",strerror(errno));
            exit(1);
     }
        printf("our connection succeeded!\n");
        while(1)
     {
        printf("client:");
        scanf("%s",buffer);
        getchar();
            if((nbytes=send(sockfd,buffer,strlen(buffer),0))==-1)
     {
            printf("send failed with error \n");
            exit(1);
     }
        if((nbytes=recv(sockfd,buffer,strlen(buffer),0))==-1);
     {
            printf(stderr," Read Error:%s\n",strerror(errno));
            exit(1);
     }
        buffer[nbytes]='\0';
        printf("sever:%s\n",buffer);
     }
        printf("I have received:%s\n",buffer);
        close(sockfd);
        eixt(0);
    
}

Server  Part  :

 

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

#define BACKLOG 10

int main(int argc, char *argv[])
{
    int sockfd,new_fd;
    int ret;
    struct sockaddr_in server_addr;
    struct sockaddr_in client_addr;
    int sin_size,portnumber;
    char buffer[1024];
    if(argc!=2)
    {
        fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
        exit(1);
    }
    if((portnumber=atoi(argv[1])) <0)
    {
        fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
        exit(1);
    }
    if((sockfd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1)
    {
        fprintf(stderr,"Socket error:%s\n\a",strerror(errno));
        exit(1);
    }
    bzero(&server_addr,sizeof(server_addr));
    server_addr.sin_family=AF_INET;
    server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
    server_addr.sin_port=htons(portnumber);
    if(bind(sockfd,(struct sockaddr*)(&server_addr),sizeof(struct sockaddr))==-1)
    {
        fprintf(stderr,"Bind error:%s\n\a",strerror(errno));
        exit(1);
    }
    if(listen(sockfd,5)==-1)
    {
        fprintf(stderr,"Listen error:%s\n\a",strerror(errno));
        exit(1);
    }
    printf("we are waiting a connection on port %d\n",portnumber);
    
        sin_size=sizeof(struct sockaddr_in);
        if((new_fd=accept(sockfd,(struct sockaddr*)(&client_addr),&sin_size))==-1)
     {
            fprintf(stderr,"Server get connection from %s\n",inet_ntoa(client_addr.sin_addr));
            if(write(new_fd,buffer,strlen(buffer))==-1)
     {
                fprintf(stderr,"Write Error:%s\n",strerror(errno));
             exit(1);
     }
     }
        printf("We successfull ^^^^from %s:%d\n",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));
        printf("we are waiting to receive data...\n");
        while(1)
     {
            if((ret = recv(new_fd,buffer,sizeof(buffer),0))==-1)
     {
                printf("receive failed!\n");
             exit(0);
     }
            buffer[ret]='\0';
            printf("cilent: %s\n",buffer);
            printf("server:");
            scanf("%s",buffer);getchar();
            if((ret = send(new_fd,buffer,sizeof(buffer),0))==-1)
     {
                printf("send failed!\n");
             exit(0);
     }
     }
    
    
    close(new_fd);
    close(sockfd);
}

this is a example which an engineer do not know how to debug

So I help to debug with It.

Step One :

compile  the Server and Client,e.g 

compile as  chat_server , chat_client

Step Tow:

 run the server at the back ground ,

    ./chat_server  1234 &    <----run this at back ground

 step three:

   run the client

    ./chat_client  127.0.0.1 1234

operat according with the indication

   have fun !

 

 

 


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar