一、概述

客户从标准输入读入一行文本,并写给服务器

服务器从网络输入读入这行文本,并回射给客户

客户从网络输入读入这行回射文本,并显示在标准输出上

二、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客户/服务器程序示例(五)的更多相关文章

  1. 第5章-unix网络编程 TCP/服务端程序示例

    这一章主要是完成一个完整的tcp客户/服务器程序.通过一很简单的例子.弄清客户和服务器如何启动,如何终止,发生了某些错误会发生什么.这些事很重要的  客户端代码 #include "unp. ...

  2. UNIX网络编程 第5章 TCP客户/服务器程序示例

    UNIX网络编程 第5章 TCP客户/服务器程序示例

  3. 5. TCP客户/服务器程序示例

    signal 信号是一种软件中断,异步发生,在进程运行的时候随时可能发生.信号可以: 由一个进程发给另一个进程,或发给自身 由内核发给某个进程 信号的action: signal handler,在信 ...

  4. C#网络编程TCP通信实例程序简单设计

    C#网络编程TCP通信实例程序简单设计 采用自带 TcpClient和TcpListener设计一个Tcp通信的例子 只实现了TCP通信 通信程序截图: 压力测试服务端截图: 俩个客户端链接服务端测试 ...

  5. 第四章 基本TCP套接字编程 第五章 TCP客户/服务器程序实例

    TCP客户与服务器进程之间发生的重大事件时间表 TCP服务器 socket() --- bind() --- listen() --- accept() --- read() --- write -- ...

  6. TCP客户/服务器程序实例——回射服务器

    目录 客户/服务器程序源码 POSIX信号处理 POSIX信号语义 处理SIGCHLD信号 处理僵死进程 处理被中断的系统调用 wait和waitpid函数 wait和waitpid函数的区别 网络编 ...

  7. TCP客户/服务器程序概述

    一个回射服务器: 1)客户从标准输入读入一行文本,并写给服务器 2)服务器从网络输入读入这行文本,并回射给客户 3)客户从网络输入读入这行回射文本,并显示在标准输出上 回射输入行这样一个客户/服务器程 ...

  8. UNIX网络编程——TCP回射服务器/客户端程序

    下面通过最简单的客户端/服务器程序的实例来学习socket API. serv.c 程序的功能是从客户端读取字符然后直接回射回去: #include<stdio.h> #include&l ...

  9. unix网络编程——TCP套接字编程

    TCP客户端和服务端所需的基本套接字.服务器先启动,之后的某个时刻客户端启动并试图连接到服务器.之后客户端向服务器发送请求,服务器处理请求,并给客户端一个响应.该过程一直持续下去,直到客户端关闭,给服 ...

随机推荐

  1. new SqlSessionFactoryBuilder().build(inputStream, properties)

    SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream, properties); ...

  2. 使用httpclient抓取时,netstat 发现很多time_wait连接

    http://wiki.apache.org/HttpComponents/FrequentlyAskedConnectionManagementQuestions 1. Connections in ...

  3. Pythoner | 你像从前一样的Python学习笔记

    Pythoner | 你像从前一样的Python学习笔记 Pythoner

  4. 恢复Linux下被误删除的文件(笔记)

    恢复Linux下被误删除的文件 [root@xuegod63 ~]# mount /dev/cdrom /mnt/ 分一个区:sda4  查找:extundelete 分一个区:sda4  [root ...

  5. android中创建模拟器的 SDCard

    在eclipse中安装了android环境后,可以直接创建AVD和sdcard的,windows->Android Virtual Device Manager,创建一个AVD时,可以同时创建s ...

  6. poj 2096 Collecting Bugs(期望 dp 概率 推导 分类讨论)

    Description Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other ...

  7. Uiviewcontroller 控制器的生命周期

    这是一个ViewController完整的声明周期,其实里面还有好多地方需要我们注意一下: 1:initialize函数并不会每次创建对象都调用,只有在这个类第一次创建对象时才会调用,做一些类的准备工 ...

  8. 关于safari上的select宽高问题小技,自定义下拉框

    之前一直用windows做开发,最近换了个mac,在几经折腾之下,安装完了各种开发工具,IDE等,然后欣然打开自己正在开发的网站.突然发现mac上所有的下拉框都变了,都是默认样式,无论padding, ...

  9. 【转】invokeRequired属性和 invoke()方法

    C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它. 此时它将会在内部调用n ...

  10. Android应用程序启动过程源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6689748 前文简要介绍了Android应用程 ...