zoukankan      html  css  js  c++  java
  • 正常启动

    尽管我们的TCP程序例子很小

    2个main函数加上str_echo、str_cli、readline、writen

    然而对于我们弄清客户和服务器如何启动,如何终止,更为重要的是当发生某些错误时将会发生什么

    (例如:客户主机崩溃,客户进程崩溃,网页连接断开,等等)

    只有搞清楚这些边界条件以及它们与TCP/IP协议的相互作用

    我们才能够写出能够处理这些情况的健壮的客户和服务器程序

    首先我们在主机linux上后台启动服务器

    服务器启动后,它调用socket、bind、accept,并阻塞于accept调用(我们还没有启动客户)

    在启动客户之前,我们运行netstat程序来检查服务器监听套接字的状态

    一个套接字处于LISTENT状态,它有通配的本地IP地址,本地端口9877

    netstat用“*”来表示一个为0的IP地址或为0的端口号

    我们接着在同一个主机上启动客户,并指定服务器主机的IP地址为127.0.0.1(环回地址)

    当然我们也可以指定该地址为该主机的普通IP地址

    客户调用socket和connect,后者引起TCP三次握手过程。当握手完成后,客户中的connect和服务器中的accept均返回,连接于是建立。

    接着:

    1)客户调用str_cli函数,该函数将阻塞于fgets调用,因为我们还没有键入一行文本

    2)当服务器中的accept返回时,服务器调用fork,再由子进程调用str_echo。该函数调用readline,readline再调用read,而read在等待客户送入一行文本期间阻塞

    3)另一方面,服务器父进程再次调用accept并阻塞,等待下一个客户连接

    至此,我们有3个都在睡眠的进程:客户进程、服务器父进程、服务器子进程

    ========================if i have some wrong, please give me a message, thx.========================
  • 相关阅读:
    Json 操作
    visual studio 单元测试的认识
    EntityFramework 贪婪加载与延迟加载以及资源回收
    idea 查看源码
    idea技巧快速生成构造函数 get set
    Spring Boot Jpa框架自定义查询语句返回自定义实体
    启动redis
    查找nginx安装目录并启动
    idea技巧 --查找当前方法都被哪些类引用
    第一个webapi及swagger
  • 原文地址:https://www.cnblogs.com/ailx10/p/5352787.html
Copyright © 2011-2022 走看看