unix网络编程卷一: 第五章:服务器反射客户端消息(一)
来源:互联网 发布:如何在淘宝上买到电棒 编辑:程序博客网 时间:2024/04/29 23:12
服务器代码(tcpsrv01.c):
#include "unp.h"
int main(int argc, char **argv)
{
intlistenfd, connfd;
pid_tchildpid;
socklen_tclilen;
struct sockaddr_incliaddr, servaddr;
listenfd = Socket(AF_INET, SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
Bind(listenfd, (SA *) &servaddr,sizeof(servaddr));
Listen(listenfd, LISTENQ);
for ( ; ; ) {
clilen =sizeof(cliaddr);
connfd = Accept(listenfd, (SA *) &cliaddr, &clilen);
if ( (childpid = Fork()) ==0) { /* child process *///复制一个子进程处理
Close(listenfd);/* close listening socket */
str_echo(connfd);/* process the request */ //具体处理函数
exit(0);
}
Close(connfd);/* parent closes connected socket */
}
}
#include "unp.h"
void str_echo(int sockfd)
{
ssize_tn;
charbuf[MAXLINE];
again:
while ( (n = read(sockfd, buf, MAXLINE)) >0) //从客户端读取消息
Writen(sockfd, buf, n);//反射消息
if (n <0 && errno == EINTR)
goto again;
elseif (n < 0)
err_sys("str_echo: read error");
}
#include "unp.h"
int main(int argc, char **argv)
{
intsockfd;
struct sockaddr_inservaddr;
if (argc !=2)
err_quit("usage: tcpcli <IPaddress>");
sockfd = Socket(AF_INET, SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
Inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
Connect(sockfd, (SA *) &servaddr,sizeof(servaddr));
str_cli(stdin, sockfd);/* do it all */ //客户端具体处理函数
exit(0);
}
#include "unp.h"
void str_cli(FILE *fp, int sockfd)
{
charsendline[MAXLINE], recvline[MAXLINE];
while (Fgets(sendline, MAXLINE, fp) !=NULL) { //从输入设备读取信息
Writen(sockfd, sendline, strlen(sendline));//发送给服务器
if (Readline(sockfd, recvline, MAXLINE) ==0) //从服务器读取返回信息
err_quit("str_cli: server terminated prematurely");
Fputs(recvline, stdout);//输出到显示设备
}
}
- unix网络编程卷一: 第五章:服务器反射客户端消息(一)
- unix网络编程卷一: 第八章:简单UDP客户端服务器通信(一)
- UNIX网络编程卷一 笔记 第五章 TCP客户/服务器程序示例
- UNIX网络编程卷一:第五章 TCP客户/服务器程序实例
- UNIX网络编程卷一 第五章 TCP客户/服务器程序示例
- unix网络编程卷一: 第八章:简单UDP客户端服务器通信(二)-解决客户端一直等待问题
- UNIX网络编程卷一:第一章 简单的客户端服务器程序
- UNIX 网络编程 卷一:套接字联网API(第3版) 读书笔记(5) 第五章 TCP客户/服务器程序示例
- Unix网络编程卷一: 从服务器获取时间信息(三)-daytimetcpcli2客户端每次执行结果不同
- UNIX网络编程卷一:第十三章 守护进程和inetd超级服务器
- UNIX网络编程卷一:第三十章 客户/服务器程序设计范式
- Unix 网络编程卷一- 学习笔记
- unix网络编程(卷一)--安装源码
- 【计算机网络】《unix网络编程卷一》读书笔记
- unix 网络编程 卷一(unp.h)
- Unix网络编程卷一笔记
- UNIX网络编程卷一 第一章 简介
- 学习《UNIX网络编程卷一》笔记
- 纯虚函数与抽象基类
- iOS多语言
- RWTHLM 源码分析(三)之输出层
- servlet体系结构
- DB2 LONG 转日期格式
- unix网络编程卷一: 第五章:服务器反射客户端消息(一)
- Android开发学习笔记之改变对话框的透明度
- 如何定位App是未来的App开发关键
- Java SE 基础概述(一)
- Artistic Style 2.05.1
- 【iOS开发-状态栏】关于怎么更改系统自带状态栏(变为白色或者隐藏)
- android-async-http框架库使用基础
- MyEclipse Servers视窗出现“Could not create the view: An unexpected exception was thrown”错误解决办法
- 类访问限定符