服务端处理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. 一行代码设置TForm颜色的前世今生(属性赋值引起函数调用,然后发消息实现改变显示效果),TForm的初始颜色在dfm中设置了clBtnFace色

    来自万一的帖子:http://www.cnblogs.com/del/archive/2008/04/27/1173658.html的确做到了一行代码设置TForm控件的颜色(一点感想:Delphi程 ...

  2. 291. Word Pattern II

    题目: Given a pattern and a string str, find if str follows the same pattern. Here follow means a full ...

  3. C++:流类库与输入输出

    7.2.1 C++的输入输出流 ios:流基类(抽象类) istream:通用输入流类和其他输入流的基类 ostream:通用输出流类和其他输出类的基类 iostream:通用输入输出流类和其他输入输 ...

  4. MVC+EF+Spring.Net代码生成器

    最近研究学习了MVC.EF等相关技术,写了一套项目架构.只要更改EF模型,生成数据库并转换T4模版.数据层和业务层就可以自动生成了. 主要用到的技术: 1.EF实体框架. 2.Spring.Net依赖 ...

  5. iphone 6 设置自定义铃声(未越狱)

    环境: ipone 6 iTunes 12.4.0.119 IOS 9.3.2 先把需要设置的铃声下载到电脑上,然后打开iTunes下的文件->将文件添加到资料库,如图: 2.在音乐列表里右击所 ...

  6. UX结合需求实例化进行设计开发

    技  术  文  件 技术文件名称:实例化+UX需求分析实践:场景监控需求实例化 技术文件编号: 版        本:V1.0 共 32 页 (包括封面) 拟  制    廖开蒙.刀锋团队 审  核 ...

  7. 【公司要求】- RPC学习(一)

    HADOOP-IPC(这里说的是1.0.4版本) 是轻量级RPC,在hadoop中主要用于2方面 1.TaskTracker和JobTracker 通讯. 2.NameNode和DataNode通讯. ...

  8. 测试用例生成工具ALLPAIRS(转)

    ALLPAIRS是一个测试用例设计工具,用于Windows,但移植到了多种平台,以适应该脚本文件的一些小改动.它自动对所有实验技术进行设计,通过这个工具的方法可以在海量的数据组合中选择少量的数据生成测 ...

  9. Fedora 15 KDE中如何打开software management及如何应用

    Fedora 15 KDE中如何打开software management级如何应用 software management中有转载和卸载软件(Get and remove software)的功能 ...

  10. 深入理解Java内存模型(一)——基础

    并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体).通信是指线程之间以何种机制来交换信息.在命令式编程中,线程之间的通信 ...