源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Linux下C语言实现C/S模式编程

  • 时间:2022-12-10 16:23 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Linux下C语言实现C/S模式编程
由标题可知,这篇文章主要讲如何用C语言实现一个C/S模式的程序。 主要功能:时间回送。 客户机发出请求,服务器响应时间,并返回服务器时间,与客户机进行同步。 废话不多说,下面直接贴出源代码。 代码如下:
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <unistd.h> 
#include <errno.h> 
#include <time.h> 
 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <arpa/inet.h> 
 
void client_process(int connfd); 
 
int main(int argc, char *argv[]) 
{ 
  int ret; 
  int listenfd; 
  int connfd; 
  struct sockaddr_in srvaddr; 
  struct sockaddr_in cliaddr; 
  socklen_t addrlen; 
 
  listenfd = socket(AF_INET, SOCK_STREAM, 0); 
  if (listenfd == -1) { 
    perror("socket"); 
    exit(EXIT_FAILURE); 
  } 
 
  srvaddr.sin_family = AF_INET; 
  srvaddr.sin_port = htons(8888); 
  srvaddr.sin_addr.s_addr = htonl(INADDR_ANY); 
  ret = bind(listenfd, (struct sockaddr *)&srvaddr, sizeof(srvaddr)); 
  if (ret == -1) { 
    perror("bind"); 
    exit(EXIT_FAILURE); 
  } 
 
  ret = listen(listenfd, 5); 
  if (ret == -1) { 
    perror("listen"); 
    exit(EXIT_FAILURE); 
  } 
 
  while (1) { 
    memset(&cliaddr, 0, sizeof(cliaddr)); 
    addrlen = sizeof(cliaddr); 
    connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &addrlen); 
    if (connfd != -1) { 
      printf("a new client is comming\n"); 
      client_process(connfd); 
      printf("disconnect\n"); 
      close(connfd); 
    } else 
      perror("accept"); 
  } 
 
  close(listenfd); 
} 
 
void client_process(int connfd) 
{ 
  int ret; 
  char buf[4096]; 
 
  while (1) { 
    memset(buf, 0, sizeof(buf)); 
    strcpy(buf, "Kevin@TimeServer $ "); 
    ret = write(connfd, buf, strlen(buf) + 1); 
    if (ret == -1) { 
      perror("write"); 
      return; 
    } 
 
    memset(buf, 0, sizeof(buf)); 
    ret = read(connfd, buf, sizeof(buf)); 
    if (ret > 0) { 
      if (strcmp(buf, "time\r\n") == 0) { 
        time_t t; 
 
        memset(buf, 0, sizeof(buf)); 
        strcpy(buf, "Kevin@TimeServer $ "); 
        ret = write(connfd, buf, strlen(buf) + 1); 
        if (ret == -1) { 
          perror("write"); 
          return; 
        } 
 
        time(&t); 
        strcpy(buf, ctime(&t)); 
 
        ret = write(connfd, buf, strlen(buf) + 1); 
        if (ret == -1) { 
          perror("write"); 
          return; 
        } 
      } 
    } else if (ret == -1) { 
      perror("read"); 
      return; 
    } else 
      return; 
  } 
} 
主要过程 1.建立源程序,输入源代码。 2.打开一个终端,编译运行程序。编译程序:gcc cs.c   运行程序:./a.out 3.新开一个终端,输入:telnet localhost 8888 主窗口效果如下: [img]http://files.jb51.net/file_images/article/201601/2016127100526809.png?201602710536[/img] 4.在子窗口中输入:time 子窗口显示如下: [img]http://files.jb51.net/file_images/article/201601/2016127100543191.png?201602710550[/img] 5.关闭子窗口,主窗口显示:连接断开。 效果如下: [img]http://files.jb51.net/file_images/article/201601/2016127100557003.png?20160271063[/img] 好吧,程序就讲到这里了,希望大家喜欢,对大家的学习有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部