服务端处理1个客户端的例子

运行结果:

(1) while(accept+if(recv)) 情形

执行服务端进程:

[root@localhost single_link]# ./server
[server]: begin
[server]: loop......
Client[127.0.0.1,]==>Server:
now send data to conn_id
[server]: loop......
Client[127.0.0.1,]==>Server:
now send data to conn_id
[server]: loop......

执行第1个客户端进程,服务端对第2条指令无响应


[root@localhost single_link]# ./client
[client]: begin
connect to dest host..
[Client]: loop......: input your word:>
Server==>Client:
[Client]: loop......: input your word:>

开户第2个客户端,并执行:服务端对第2条指令也无响应

[root@localhost single_link]# ./client
[client]: begin
connect to dest host..
[Client]: loop......: input your word:>
Server==>Client:
[Client]: loop......: input your word:>

(2)第2种情形:accept + while(recv)

  这种情形是不正常的,必须避免这种写法。

(3) 第3种情形:while(accept + while(recv))

也是现在我们想要的情形:server与1个client进行交互操作,当第1个client退出时,server会执行while循环体的起始代码,即继续等待下一个client,而不是像第(2)种情形一样,在一个可能不存在的套接字上recv/send数据。

执行服务端:

[root@localhost single_link]# ./server
[server]: begin
[server]: loop......
Client[127.0.0.1,]==>Server:
now send data to conn_id
Client[127.0.0.1,]==>Server:
now send data to conn_id
Client[127.0.0.1,]==>Server:
now send data to conn_id

执行第1个Client:

[root@localhost single_link]# ./client
[client]: begin
connect to dest host..
[Client]: loop......: input your word:>
Server==>Client:
[Client]: loop......: input your word:>
Server==>Client:
[Client]: loop......: input your word:>
Server==>Client:
[Client]: loop......: input your word:> 在第1个client Ctrl+c退出后,如果第2个客户端程序仍未关闭,服务端将会与第2个client进行交互操作:于是有了以下信息:

Client[127.0.0.1,49934]==>Server: 21
now send data to conn_id

[Client]: loop......: input your word:>

然后执行第2个client:

[root@localhost single_link]# ./client
[client]: begin
connect to dest host..
[Client]: loop......: input your word:>

案例总结:

该实例验证的是服务端:客户端=1:1的情形,

从服务端程序逻辑上看,第1个while用于属于accept/connect while循环,完成与client的连接操作,内部的while属于recv/send循环操作,完成与client的数据传输操作。

如果第client1不关闭socket,服务端的recv/send while就不会退出,

所以当第client2连接到server的时候,connec和send都是成功的,但因为服务端正处于与client1的交互中而无法响应send操作,所以client2会block在这里,等待server的数据返回,

这时如题第1个client关闭了,server与client2

socket基础实例(一个服务端对应一个客户端情形)的更多相关文章

  1. java基于socket的网络通信,实现一个服务端多个客户端的群聊,传输文件功能,界面使用Swing

    最近在复习java的io流及网络编程.但复习写那些样板程序总是乏味的.便准备写个项目来巩固.想来想去还是聊天项目比较好玩.如果日后完成的比较好自己也可以用(哈哈哈).并且自己后面也要继续巩固java多 ...

  2. 多个微信小程序一个服务端架构

    由于某些特定的业务场景,当多个小程序需要一个服务端后台提供数据时,大家可能想到是HTTP路由.是的,实际上我们使用微服务的GateWay网关也是一样的,如下图微服务架构: 网关GateWay的作用在于 ...

  3. 写一个基于TCP协议套接字,服务端实现接收客户端的连接并发

    ''' 写一个基于TCP协议套接字,服务端实现接收客户端的连接并发 ''' client import socket import time client = socket.socket() clie ...

  4. Netty 的基本简单实例【服务端-客户端通信】

    Netty是建立在NIO基础之上,Netty在NIO之上又提供了更高层次的抽象. 在Netty里面,Accept连接可以使用单独的线程池去处理,读写操作又是另外的线程池来处理. Accept连接和读写 ...

  5. [经验] Java 服务端 和 C# 客户端 实现 Socket 通信

    由于项目需要, 我需要通过 Java 开发的服务端对 C# 作为脚本语言开发的 unity 项目实现控制 话不多说, 直接上代码 首先, 我们先来构建服务端的代码, 服务端我们使用 Java 语言 i ...

  6. 客户端 new socket时候 就像服务端发起连接了

    客户端 new socket时候  就像服务端发起连接了

  7. 服务端挂了,客户端的 TCP 连接还在吗?

    作者:小林coding 计算机八股文网站:https://xiaolincoding.com 大家好,我是小林. 如果「服务端挂掉」指的是「服务端进程崩溃」,服务端的进程在发生崩溃的时候,内核会发送 ...

  8. java网络编程TCP传输—流操作—服务端反馈与客户端接收

    在读取完流后,服务端会向客户端返回一些数据,告诉客户端,已经写完了. 在这里和”流操作—拿到源后的写入动作“差不多,客户端同样以byte与Buffered两种缓冲读取作为例子,同时,.也是希望大家给补 ...

  9. “快的打车”创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - V2EX

    "快的打车"创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - ...

随机推荐

  1. Linux Command Line 解析

    Linux Command Line 解析 0 处理模型 Linux kernel的启动包括很多组件的初始化和相关配置,这些配置参数一般是通过command line进行配置的.在进行后续分析之前,先 ...

  2. iOS开发--iOS及Mac开源项目和学习资料

    文/零距离仰望星空(简书作者)原文链接:http://www.jianshu.com/p/f6cdbc8192ba著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 原文出处:codecl ...

  3. iOS8 Size Classes的理解与使用

    在iOS8中,新增了Size Classes特性,它是对当前所有iOS设备尺寸的一个抽象,也是该抽象了,想想现在多少种iOS尺寸的设备吧:iPhone4-5-6-6plus.iPad.iPad min ...

  4. Echarts - js

    <script type="text/javascript"> var myChart; myChart = echarts.init(document.getElem ...

  5. zoj 3165 (最小割,最大点权独立集)

    胡伯涛的<最小割模型在信息学竞赛中的应用>写的真牛. 这道题是选择一些男孩和女孩参加party,邀请的男孩女孩之间不能有 8g,图就是个明显的二分图,就是选择一些点之间没有8g关系,就是二 ...

  6. 验证工具类 - ValidateUtils.java

    验证工具类,提供验证email格式.是否ipv4.是否ipv6.是否中文.是否数字.正则表达式验证的方法. 源码如下:(点击下载 - ValidateUtils.java .commons-lang- ...

  7. YTU 2620: B 链表操作

    2620: B 链表操作 时间限制: 1 Sec  内存限制: 128 MB 提交: 418  解决: 261 题目描述 (1)编写一个函数createlink,用来建立一个动态链表(链表中的节点个数 ...

  8. C# 类的访问修改符

    C#共有五种修饰符:public.private.protected.internal.protected internal. ◆public:公有,对所有类可见,不受任何限制 ◆protected: ...

  9. how bootstrap fit into our website design?

    在web相关技术中,HTML代表了content,structure, CSS则负责styling,决定内容是如何展示的,javascript则主要负责interactive, behaviour. ...

  10. UVa 10635 (LIS+二分) Prince and Princess

    题目的本意是求LCS,但由于每个序列的元素各不相同,所以将A序列重新编号{1,2,,,p+1},将B序列重新编号,分别为B中的元素在A中对应出现的位置(没有的话就是0). 在样例中就是A = {1 7 ...