Socket 服务器端 简单实例

来源:互联网 发布:mac一般用什么办公软件 编辑:程序博客网 时间:2024/05/22 10:55

/**

 * Tcp Server program, It is a simple example only.

 * zhengsh 200520602061 2

 * when client connect to server, send a welcome message and timestamp in server.

 */


#include <stdio.h>

#include <sys/socket.h>

#include <unistd.h>

#include <sys/types.h>

#include <netinet/in.h>

#include <stdlib.h>

#include <time.h>

#include <arpa/inet.h>


#define SERVER_PORT 20000// define the defualt connect port id

#define LENGTH_OF_LISTEN_QUEUE 10//length of listen queue in server

#define BUFFER_SIZE 255

#define WELCOME_MESSAGE "welcome to connect the server. "



int main(int argc,char **argv)

{

    

    printf("ok...\n");

   int servfd, clifd;

   struct sockaddr_in servaddr,cliaddr;

    

   if ((servfd = socket(AF_INET,SOCK_STREAM, 0)) <0)

    {

        printf("create socket error!\n");

       exit(1);

    }

    

   bzero(&servaddr,sizeof(servaddr));

    servaddr.sin_family =AF_INET;

    servaddr.sin_port =htons(SERVER_PORT);

    servaddr.sin_addr.s_addr =htons(INADDR_ANY);

   int flag=1,len=sizeof(int);

   if( setsockopt(servfd,SOL_SOCKET, SO_REUSEADDR, &flag, len) == -1)

    {

        perror("setsockopt\n");

       exit(1);

    }

    

   if (bind(servfd,(structsockaddr*)&servaddr,sizeof(servaddr))<0)

    {

        printf("bind to port %d failure!\n",SERVER_PORT);

       exit(1);

    }

    

    if (listen(servfd,LENGTH_OF_LISTEN_QUEUE) <0)

    {

        printf("call listen failure!\n");

       exit(1);

    }

    

   while (1)

    {

        //server loop will nerver exit unless any body kill the process

       char buf[BUFFER_SIZE];

       long timestamp;

       socklen_t length = sizeof(cliaddr);

        

        printf("accept 1 ...\n");

        clifd =accept(servfd,(structsockaddr*)&cliaddr,&length);

        

        printf("accept 2...\n");

       if (clifd < 0)

        {

            printf("error comes when call accept!\n");

           break;

        }

        printf("accept 3...\n");

       strcpy(buf,WELCOME_MESSAGE);

        //inet_ntop(INET_ADDRSTRLEN,cliaddr.sin_addr,buf,BUFFER_SIZE);

        

        printf("accept 4...\n");

       printf("from client,IP:%s,Port:%d\n",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));

        timestamp =time(NULL);

        strcat(buf,"timestamp in server:");

       strcat(buf,ctime(&timestamp));

        

       printf("send : [%s]\n", buf);

        

       send(clifd,buf,BUFFER_SIZE,0);

        

       char buf2[200] = {0 };

       recv(clifd, buf2, 200, 0);

       printf("buf2:[%s]\r\n", buf2);

    

       sleep(30);

        

       close(clifd);

        

    }//exit

    

    printf("exit...\n");

   close(servfd);

   return 0;

}


0 0
原创粉丝点击