Linux下C說話完成C/S形式編程。本站提示廣大學習愛好者:(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.封閉子窗口,主窗口顯示:銜接斷開。
後果以下:
好吧,法式就講到這裡了,願望年夜家愛好,對年夜家的進修有所贊助。