LINUX同步聊天小程序

/*=====================================

*

*文件名:tcp_client.c

*

*文件描述:TCP循环服务器客户端

*

*作者:xue 20120726

*

*====================================*/

#include <stdio.h>

#include <stdlib.h>

#include <netinet/in.h>

#include <unistd.h>

#include <sys/socket.h>

#include <sys/types.h>

#include <time.h>

#include <string.h>


#define BUFFER 1024

#define PORT 7777


int main(int argc, char *argv[])

{

    int client_sockfd;

    struct sockaddr_in server_addr;

    char buffer[BUFFER];

    int len = sizeof (server_addr);

    int rel;

    int n;

    client_sockfd = socket (AF_INET, SOCK_STREAM, 0);

    if(client_sockfd < 0)

    {

    printf("sock error\n");

    return -1;

    }

    bzero(&server_addr, sizeof (server_addr));

    server_addr.sin_family= AF_INET;

    server_addr.sin_port= htons (PORT);

    server_addr.sin_addr.s_addr= htonl (INADDR_ANY);

    rel =connect (client_sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));

    if(rel < 0)

    {

    printf("connect error\n");

    return -1;

    }

    printf("wait for the server send someting to client\n");

    while(1)

   {

         memset(buffer, 0, sizeof (buffer));

         n =recv (client_sockfd, buffer, BUFFER, 0);

         if(n > 0)

        {

               printf("recv data from server success!\n");

               printf("server: %s\n", buffer);

        }

         memset(buffer, 0, sizeof (buffer));

         printf("please input someting send to the server!\nclient:");

         fgets(buffer, BUFFER, stdin);

         if(!(strncmp (buffer, "quit", 4)))

         {

                printf("client request stop!\n");

                break;

         }


         n = send (client_sockfd, buffer, strlen (buffer), 0);

        if(n > 0)

       {

                printf("client send data to the server success!\n");

        }

    }

    close(client_sockfd);

    return 0;

}





/*=====================================

*

*文件名:tcp_server.c

*

*文件描述:TCP循环服务器服务器端

*

*作者:xue 20120726

*

*====================================*/

#include<stdio.h>

#include<stdlib.h>

#include<netinet/in.h>

#include<unistd.h>

#include<sys/socket.h>

#include<sys/types.h>

#include<time.h>

#include<string.h>


#define BUFFER 1024

#define PORT 7777


int main(int argc, char *argv[])

{

      int server_sockfd, client_sockfd;

     struct sockaddr_in server_addr, client_addr;

     char buffer[BUFFER];

     int len = sizeof (client_addr);

     int rel;

     int n;

    server_sockfd = socket (AF_INET, SOCK_STREAM, 0);

    if(server_sockfd < 0)

   {

          printf("sock error\n");

          return -1;

    }

    bzero(&server_addr, sizeof (server_addr));

    server_addr.sin_family= AF_INET;

    server_addr.sin_port= htons (PORT);

    server_addr.sin_addr.s_addr= htonl (INADDR_ANY);

    rel = bind (server_sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));

    if(rel < 0)

    {

          printf("bind error\n");

          return -1;

     }

     rel =listen (server_sockfd, 5);

     if(rel < 0)

    {

            printf("listen error\n");

            return -1;

    }

    memset(buffer, 0, BUFFER);

    while(1)

    {

          printf("wait the new client to connection!\n");

          client_sockfd= accept(server_sockfd, (struct sockaddr *)&client_addr, &len);

          if(client_sockfd > 0)

         {

                printf("server: got connection from %s, port : %d \n", inet_ntoa(client_addr.sin_addr), ntohs (client_addr.sin_port));

          }

         while(1)

        {

                memset(buffer, 0, sizeof (buffer));

                printf("please input someting what you wan to send to the client.\nserver:");

                fgets(buffer, BUFFER, stdin);

                if(!(strncmp (buffer, "quit", 4)))

                {

                      printf("server request stop!\n");

                      break;

                 }

                n =send(client_sockfd, buffer, strlen(buffer), 0);

                if(n > 0)

                {

                       printf("server send to the client success! server send %d bytes to theclient %d!\n", n);

                 }

                 else

                 {

                      printf("server send data to the client falied!\n");

                      break;

                  }

                 n =recv (client_sockfd, buffer, BUFFER, 0);

                 if(n > 0)

                {

                          printf("recv the data from the client!\nclient: %s", buffer);

                }

               else

                {

                        printf("don't recv data from client!\n");

                 }

           }

         close(client_sockfd);

    }

     close(server_sockfd);

     return0;

}



首先,编译后,先运行服务器server

[root@localhostlianxi]# ./server

waitthe new client to connection!


再运行客户端

[root@localhostlianxi]# ./client

waitfor the server send someting to client


接着就可以实现同步通信了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值