开发者

C, Socket Programming: 1 Server 2 Clients connected by HUB, Chat Application Using TCP

I have codes for connecting and Chatting between 1 Server 1 Client as follows:

/*Server Side*/

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

main()
{
    int sd,i,len,bi,nsd,port;
    char content[30];
    struct sockaddr_in ser,cli;

    if((sd=socket(AF_INET,SOCK_STREAM,IPPROTO_开发者_运维百科TCP))==-1)
    {
        printf("\nSocket problem");
        return 0;
    }

    printf("\nSocket created\n");
    bzero((char*)&cli,sizeof(ser));
    printf("ENTER PORT NO:\n");
    scanf("%d",&port);
    printf("\nPort Address is %d\n:",port);
    ser.sin_family=AF_INET;
    ser.sin_port=htons(port);
    ser.sin_addr.s_addr=htonl(INADDR_ANY);
    bi=bind(sd,(struct sockaddr *)&ser,sizeof(ser));

    if(bi==-1)
    {
        printf("\nBind error, Port busy, Plz change port in client and server");
        return 0;
    }

    i=sizeof(cli);
    listen(sd,5);
    nsd = accept(sd,((struct sockaddr *)&cli),&i);

    if(nsd==-1)
    {
        printf("\nCheck the description parameter\n");
        return 0;
    }

    printf("\nConnection accepted!");

    if(fork())
    {
        printf("\nEnter the data to be send type exit for stop:\n");
        scanf("%s",content);

        while(strcmp(content,"exit")!=0)
        {
            send(nsd,content,30,0);
            scanf("%s",content);
        }

        send(nsd,"exit",5,0);
    }
    else
        i = recv(nsd,content,30,0);

    while(strcmp(content,"exit")!=0)
    {
        printf("\nClient: %s\n",content);
        i=recv(nsd,content,30,0);
    }

    printf("\nBye");
    send(nsd,"Offline",10,0);
    close(sd);
    close(nsd);
    return 0;
}

/*Client Side*/

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

int main()
{
    int sd,con,port,i,Res;
    char content[30];
    struct sockaddr_in cli;

    if((sd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1)
    {
        printf("\nSocket problem");
        return 0;
    }

    bzero((char*)&cli,sizeof(cli));
    cli.sin_family = AF_INET;
    printf("ENTER PORT NO:\n");
    scanf("%d",&port);
    cli.sin_port=htons(port);
    cli.sin_addr.s_addr=htonl(INADDR_ANY);

    con=connect(sd,(struct sockaddr*)&cli,sizeof(cli));

    if(con==-1)
    {
        printf("\nConnection error");
        return 0;
    }

    if(fork())
    {
        printf("\nEnter the data to be send type exit for stop:\n");
        scanf("%s",content);

        while(strcmp(content,"exit")!=0)
        {
            send(sd,content,30,0);
            scanf("%s",content);
        }
        send(sd,"exit",5,0);
    }
    else
    {
        i=recv(sd,content,30,0);

        while(strcmp(content,"exit")!=0)
        {
            printf("\nServer: %s\n",content);
            i=recv(sd,content,30,0);
        }
        send(sd,"exit",5,0);
    }
    close(sd);
    return 0;
}

I need to connect another client which can also chat using the same port. Please give me codes to do that. Thank You.


You must fork your server's program logic after calling fork(). One branch communicates with the client, the other will have to call accept again.

There is no need to spawn a new process, you can also handle all connections as well as the listen process with the select() function. The result of that function and the result of the FD_ISSET macros will indicate, which connection needs to be handled or established.


we can connect more than 1 client using thread in server program. for that we need to use pthread header file in server.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜