TCP客户/服务器程序实例——回射服务器
TCP客户/服务器程序实例——回射服务器
目录
客户/服务器程序源码
POSIX信号处理
POSIX信号语义
处理SIGCHLD信号
处理僵死进程
处理被中断的系统调用
wait和waitpid函数
wait和waitpid函数的区别
网络编程可能会遇到的三种情况
TCP程序小结
数据格式
回射输入行这样一个客户/服务器程序是一个虽然简单然而却很有效的网络应用程序的例子。实现任何客户/服务器网络应用所需的所有基本步骤可通过本例子阐明。若想把本例子扩充成你自己的应用程序,你只需修改服务器对于来自客户的输入的处理过程。
<sys/socket.h><strings.h><sys/types.h><netinet/.h><stdio.h><stdlib.h><unistd.h><errno.h>
argc, **((listenfd = socket(AF_INET, SOCK_STREAM, )) < &servaddr, === htons((bind(listenfd, ( sockaddr *)&servaddr, (servaddr)) < (listen(listenfd, ) < = ((connfd = accept(listenfd, ( sockaddr *)&cliaddr, &clilen)) < ((childpid = fork()) < (childpid == ) (close(listenfd) < ) (close(connfd) < )
TCP回射服务器程序:str_echo函数
<stdio.h><stdlib.h><errno.h>
buf[((n = read(sockfd, buf, )) > (n < && errno == (n <
TCP回射客户程序:main函数
<stdio.h><strings.h><.h><stdlib.h><errno.h><unistd.h><sys/types.h><netinet/.h><sys/socket.h>
argc, **(argc != ((sockfd = socket(AF_INET, SOCK_STREAM, )) < &servaddr, == htons((inet_pton(AF_INET, argv[], &servaddr.sin_addr) < (connect(sockfd, ( sockaddr *)&servaddr, (servaddr)) <
TCP回射客户程序:str_cli函数
<stdio.h><stdlib.h><.h>
*fp, sendline[], recvline[(fgets(sendline, , fp) !=(readline(sockfd, recvline, ) ==
服务器和客户都要调用的自定义函数:
#include <stdio.h><stdlib.h><errno.h><unistd.h><sys/types.h> fd, * *==(nleft > ((nread = read(fd, ptr, nleft)) < (errno === ;
(- (nread == ; -=+=(n - nleft); fd, * *==(nleft > ((nwritten = write(fd, ptr, nleft)) <= (nwritten < && errno === ;
(-); -=+=(n - fd, * c, *=(n = ; n < maxlen; n++((rc = read(fd, &c, )) == *ptr++ =(c == ; (rc == *ptr = (n - ); (errno ==(-);