当前位置: 首页 > 编程笔记 >

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

党星鹏
2023-03-14
本文向大家介绍Linux下C语言实现C/S模式编程,包括了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
主窗口效果如下:


4.在子窗口中输入:time
子窗口显示如下:

5.关闭子窗口,主窗口显示:连接断开。
效果如下:

好吧,程序就讲到这里了,希望大家喜欢,对大家的学习有所帮助。

 类似资料:
  • 本文向大家介绍linux下c语言的多线程编程,包括了linux下c语言的多线程编程的使用技巧和注意事项,需要的朋友参考一下 我们在写linux的服务的时候,经常会用到linux的多线程技术以提高程序性能  多线程的一些小知识: 一个应用程序可以启动若干个线程。 线程(Lightweight Process,LWP),是程序执行的最小单元。 一般一个最简单的程序最少会有一个线程,就是程序本身,也就是

  • 本文向大家介绍C语言实现Linux下的socket文件传输实例,包括了C语言实现Linux下的socket文件传输实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C语言实现Linux下的socket文件传输。分享给大家供大家参考。具体如下: server.c如下: client.c如下: 希望本文所述对大家的C语言程序设计有所帮助。

  • 本文向大家介绍C语言编写Linux守护进程实例,包括了C语言编写Linux守护进程实例的使用技巧和注意事项,需要的朋友参考一下 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进 程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进

  • 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识,在这篇文章当中,我们将会学到以下内容源程序编译,Makefile的编写,程序库的链接等。

  • C语言设计模式 关于软件设计方面的书很多,比如《重构》,比如《设计模式》。至于软件开发方式,那就更多了,什么极限编程、精益方法、敏捷方法。随着时间的推移,很多的方法又会被重新提出来。 其实,就我个人看来,不管什么方法都离不开人。一个人写不出二叉树,你怎么让他写?敏捷吗?你写一行,我写一行。还是迭代?写三行,删掉两行,再写三行。项目的成功是偶然的,但是项目的失败却有很多原因,管理混乱、需求混乱、设计

  • 本文向大家介绍C语言数组栈实现模板,包括了C语言数组栈实现模板的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C语言数组栈实现模板的具体代码,供大家参考,具体内容如下 SeqStack.h SeqStack.cpp 函数实现 数组栈测试程序 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。