欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux下C語(yǔ)言實(shí)現(xiàn)C/S模式編程

 更新時(shí)間:2021年08月25日 14:35:08   作者:好兒郎-志在四方  
這篇文章主要為大家詳細(xì)介紹了Linux下C語(yǔ)言實(shí)現(xiàn)C/S模式編程的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

這篇文章主要講如何用C語(yǔ)言實(shí)現(xiàn)一個(gè)C/S模式的程序。

主要功能:時(shí)間回送。

客戶(hù)機(jī)發(fā)出請(qǐng)求,服務(wù)器響應(yīng)時(shí)間,并返回服務(wù)器時(shí)間,與客戶(hù)機(jī)進(jìn)行同步。

廢話(huà)不多說(shuō),下面直接貼出源代碼。

代碼如下:

#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; 
  } 
} 

主要過(guò)程

1.建立源程序,輸入源代碼。
2.打開(kāi)一個(gè)終端,編譯運(yùn)行程序。編譯程序:gcc cs.c   運(yùn)行程序:./a.out
3.新開(kāi)一個(gè)終端,輸入:telnet localhost 8888

主窗口效果如下:

4.在子窗口中輸入:time

子窗口顯示如下:

5.關(guān)閉子窗口,主窗口顯示:連接斷開(kāi)。

效果如下:

好吧,程序就講到這里了,希望大家喜歡,對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • C/C++中智能指針的用法詳解

    C/C++中智能指針的用法詳解

    C/C++中,指針是一個(gè)非常重要的概念,其強(qiáng)大但也麻煩,麻煩之處就在于一旦你申請(qǐng)了內(nèi)存,那就必須要手動(dòng)去釋放內(nèi)容,否則就會(huì)造成內(nèi)存泄漏。所以智能指針的作用就是防止我們麻痹大意忘記釋放內(nèi)存,幫助我們管理內(nèi)存的,本文就來(lái)聊聊智能指針的用法
    2023-01-01
  • C++ vector容器 find erase的使用操作:查找并刪除指定元素

    C++ vector容器 find erase的使用操作:查找并刪除指定元素

    這篇文章主要介紹了C++ vector容器 find erase的使用操作:查找并刪除指定元素,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • C/C++ 常用排序算法整理匯總分享

    C/C++ 常用排序算法整理匯總分享

    排序算法,就是如何使得記錄按照要求排列的方法。排序算法在很多領(lǐng)域得到相當(dāng)?shù)刂匾?,尤其是在大量?shù)據(jù)的處理方面。一個(gè)優(yōu)秀的算法可以節(jié)省大量的資源。本篇整理了c語(yǔ)言和c++的常用的排序算法,感興趣的朋友可以參考下
    2021-06-06
  • C++數(shù)據(jù)結(jié)構(gòu)的隊(duì)列詳解

    C++數(shù)據(jù)結(jié)構(gòu)的隊(duì)列詳解

    這篇文章主要為大家介紹了C++數(shù)據(jù)結(jié)構(gòu)的隊(duì)列,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • C語(yǔ)言例題之輸出1000以?xún)?nèi)的所有完數(shù)

    C語(yǔ)言例題之輸出1000以?xún)?nèi)的所有完數(shù)

    完數(shù)是一些特殊的自然數(shù),它所有的真因子(即除了自身以外的約數(shù))的和(即因子函數(shù)),恰好等于它本身,如果一個(gè)數(shù)恰好等于它的因子之和,則稱(chēng)該數(shù)為“完數(shù)”,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言例題之輸出1000以?xún)?nèi)的所有完數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • opencv實(shí)現(xiàn)矩形檢測(cè)

    opencv實(shí)現(xiàn)矩形檢測(cè)

    這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)矩形檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Qt串口通信開(kāi)發(fā)之QSerialPort模塊Qt串口通信接收數(shù)據(jù)不完整的解決方法

    Qt串口通信開(kāi)發(fā)之QSerialPort模塊Qt串口通信接收數(shù)據(jù)不完整的解決方法

    這篇文章主要介紹了Qt串口通信開(kāi)發(fā)之QSerialPort模塊Qt串口通信接收數(shù)據(jù)不完整的解決方法,需要的朋友可以參考下
    2020-03-03
  • C語(yǔ)言打印某一年中某月的日歷

    C語(yǔ)言打印某一年中某月的日歷

    本文詳細(xì)講解了C語(yǔ)言打印某一年中某月的日歷,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Vc++ 控件List Control用法總結(jié)

    Vc++ 控件List Control用法總結(jié)

    這篇文章主要介紹了Vc++ 控件List Control用法總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • C語(yǔ)言實(shí)現(xiàn)自動(dòng)發(fā)牌程序

    C語(yǔ)言實(shí)現(xiàn)自動(dòng)發(fā)牌程序

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)自動(dòng)發(fā)牌程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評(píng)論