UNIX网络编程---TCP客户/服务器程序示例(五)
一、概述
客户从标准输入读入一行文本,并写给服务器
服务器从网络输入读入这行文本,并回射给客户
客户从网络输入读入这行回射文本,并显示在标准输出上
二、TCP回射服务器程序:main函数
这里给了函数简单的main的实现
#define MAXLINE 1024
void str_echo(int);
int main(int argc,char *argv[])
{
struct sockaddr_in serveraddr,cliaddr;
char recvline[MAXLINE+1];
int nread;
int listenfd,connfd,connlen;
int pid_t;
connlen=1;
memset(&cliaddr,0,sizeof(cliaddr));
bzero(&serveraddr,sizeof(struct sockaddr_in));
serveraddr.sin_port=htons(1222);
serveraddr.sin_family=AF_INET;
if(argc>=2){
if(!inet_aton(argv[1],&serveraddr.sin_addr))
printf("inet_aton error!\r\n");
return -1; }
serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
if((listenfd=socket(AF_INET,SOCK_STREAM,0))<=0)
{
printf("socket error!\r\n");
return 0;
}
bind(listenfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr));
listen(listenfd,5);
for(;;)
{
connfd=accept(listenfd,(struct sockaddr*)&cliaddr,&connlen);
if((pid_t=fork())==0)
{
close(listenfd);
str_echo(connfd);
exit(0);
}
close(connfd);
}
return 0;
}
三、TCP回射服务器程序:str_echo函数
void str_echo(int connfd)
{
char recvline[MAXLINE+1];
int nread;
memset(recvline,0,sizeof(recvline));
nread=read(connfd,recvline,sizeof(recvline));
if(nread<=0)
{
printf("read error!\r\n");
exit(0);
}
nread=write(connfd,recvline,strlen(recvline));
if(nread<=0)
{
printf("write error!\r\n");
exit(0);
}
}
四、TCP回射客户程序:main函数
#define MAXLINE 1024
void str_cli(FILE *,int);
int main(int argc,char *argv[])
{
struct sockaddr_in cliaddr;
int nread,connfd;
char recvline[MAXLINE+1];
memset(recvline,0,sizeof(recvline));
connfd=socket(AF_INET,SOCK_STREAM,0);
if(connfd<=0)
{
printf("socket error!\r\n");
return 0;
}
bzero(&cliaddr,sizeof(struct sockaddr_in));
cliaddr.sin_family=AF_INET;
cliaddr.sin_port=htons(1222);
cliaddr.sin_addr.s_addr=inet_addr("192.168.5.163");
if(connect(connfd,(struct sockaddr*)&cliaddr,sizeof(cliaddr)))
{
printf("connect error!\r\n");
}
str_cli(stdin,connfd);
exit(0); }
五、TCP回射客户程序:str_cli函数
void str_cli(FILE *fp,int connfd)
{
int nread;
char recvline[MAXLINE+1];
memset(recvline,0,sizeof(recvline));
fgets(recvline,sizeof(recvline),fp);
write(connfd,recvline,strlen(recvline));
memset(recvline,0,sizeof(recvline));
read(connfd,recvline,sizeof(recvline));
fputs(recvline,stdout);
}
六、正常启动
七、正常终止
八、Posix信号处理
九、处理sinchld信号
十、Wait和waitpid函数
十一、 Accept返回前连接中止
十二、 服务器进程终止
十三、 Sigpipe信号
十四、 服务器主机崩溃
十五、 服务器主机崩溃后重启
十六、 服务器主机关机
十七、 Tcp程序例子小结
十八、 数据格式
UNIX网络编程---TCP客户/服务器程序示例(五)的更多相关文章
- 第5章-unix网络编程 TCP/服务端程序示例
这一章主要是完成一个完整的tcp客户/服务器程序.通过一很简单的例子.弄清客户和服务器如何启动,如何终止,发生了某些错误会发生什么.这些事很重要的 客户端代码 #include "unp. ...
- UNIX网络编程 第5章 TCP客户/服务器程序示例
UNIX网络编程 第5章 TCP客户/服务器程序示例
- 5. TCP客户/服务器程序示例
signal 信号是一种软件中断,异步发生,在进程运行的时候随时可能发生.信号可以: 由一个进程发给另一个进程,或发给自身 由内核发给某个进程 信号的action: signal handler,在信 ...
- C#网络编程TCP通信实例程序简单设计
C#网络编程TCP通信实例程序简单设计 采用自带 TcpClient和TcpListener设计一个Tcp通信的例子 只实现了TCP通信 通信程序截图: 压力测试服务端截图: 俩个客户端链接服务端测试 ...
- 第四章 基本TCP套接字编程 第五章 TCP客户/服务器程序实例
TCP客户与服务器进程之间发生的重大事件时间表 TCP服务器 socket() --- bind() --- listen() --- accept() --- read() --- write -- ...
- TCP客户/服务器程序实例——回射服务器
目录 客户/服务器程序源码 POSIX信号处理 POSIX信号语义 处理SIGCHLD信号 处理僵死进程 处理被中断的系统调用 wait和waitpid函数 wait和waitpid函数的区别 网络编 ...
- TCP客户/服务器程序概述
一个回射服务器: 1)客户从标准输入读入一行文本,并写给服务器 2)服务器从网络输入读入这行文本,并回射给客户 3)客户从网络输入读入这行回射文本,并显示在标准输出上 回射输入行这样一个客户/服务器程 ...
- UNIX网络编程——TCP回射服务器/客户端程序
下面通过最简单的客户端/服务器程序的实例来学习socket API. serv.c 程序的功能是从客户端读取字符然后直接回射回去: #include<stdio.h> #include&l ...
- unix网络编程——TCP套接字编程
TCP客户端和服务端所需的基本套接字.服务器先启动,之后的某个时刻客户端启动并试图连接到服务器.之后客户端向服务器发送请求,服务器处理请求,并给客户端一个响应.该过程一直持续下去,直到客户端关闭,给服 ...
随机推荐
- 正确地黑C
转载:http://tieba.baidu.com/p/3190068223?pn=1 本版暂时当作提纲,不做详细展开讨论,以后可能更新. 注意:本文主旨不是政治正确. 1.设计C的设计相对于同期来说 ...
- js深入研究之类定义与使用
js可以定义自己的类 很有意思 <script type="text/javascript"> var Anim = function() { alert('nihao ...
- c++ 09
一.数据结构 程序设计=数据结构+算法 1.逻辑结构 1)集合:元素之间没有联系. 2)线性结构:元素之间存在前后顺序. 3)树形结构:元素之间存在一对多的父子关系. 4)图状结构:元素之间存在多对多 ...
- 01-Java学习笔记
本系列笔记由常彦博整理,请知悉 目 录 一. Java技术基础.................................................................... ...
- 分享一个3D球面标签云
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 使用ant自动编译、打包生成apk文件
上次使用命令行生成apk文件<Android 命令行编译.打包生成apk文件>,学习命令行生成的目的是为了编写ant打下基础. 一. ant环境 下载ant包,配置环境变量 二.ant编译 ...
- LR如何监控tomcat性能
使用LoadRunner做性能测试,一般的直觉是LR只能完成脚本录制和编写模拟用户的请求行为,但是在某些情况下,要监控一些中间件或web服务器的性能时,就不能通过录制脚本来完成了,那么就需要手工来编写 ...
- 关于 linux ssh 的配置.
一.禁止root用户远程登录: # cd /etc/ssh # vi sshd_config 将 permitRootLogin 后面的值改成 no 如下图: 然后再重启sshd服务即可,如下: # ...
- EffectiveC#5--始终提供ToString()
1.System.Object版的ToString()方法只返回类型的名字 2.知道要重写它,返回更有意义的信息,最好是提供几个重载版本. 3.当你设计更多的复杂的类型时(格式化文本)应该实现应变能力 ...
- 关于position和float的用法!
我要说的是这部分的切图, 先说一下为什么要用到position 看我的截图, 应该知道这块的组成是有两部分, 但中间那个绿圈中, 组成的两个部分有重叠的, 这时候, 可能会想用float, 但floa ...