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

由标题可知,这篇文章主要讲如何用C语言实现一个C/S模式的程序。

主要功能:时间回送。

客户机发出请求,服务器响应时间,并返回服务器时间,与客户机进行同步。

废话不多说,下面直接贴出源代码。

代码如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

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

主窗口效果如下:

6d52960e66aa46f499e7f010e8b1ff0c.png

4.在子窗口中输入:time

子窗口显示如下:

883bb91a03097a795c4c62475141708f.png

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

效果如下:

566b619f4c7dd28a00cd06661c98cb62.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值