声明:此文只是为自己方便理解,做了一些具象的比喻和假设,并不符合客观事实,谨慎阅读!

​ 在一台主机中, 两个进程想要通信可以通过一个管道(文件):一个从管道的一端写,一个从另一端读 , 然而管道是半双工的 , 如果一个进程既想读又想写 , 那就创建两个管道。利用socket进行网络通信的过程与之类似:将对方主机抽象成一个全双工管道文件,为其创建文件描述符,对这个文件描述符进行读写。

创建监听套接字

int listen_fd = socket(AF_INET, SOCK_STREAM, 0);

​ 创建监听套接字的目的是监听是否有客户端连接该主机,但只有一个文件描述符客户端是找不到的,客户端是通过IP地址和端口找到需要通信的进程的,所以要将该listen_fd与IP地址和端口绑定,方便起见,将IP与端口定义成一个结构体。

监听套接字与端口绑定

// 先初始化IP + 端口 这个结构体
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
// 设置端口
server_addr.sin_port = htons(8080);
// 设置ip
inet_pton(AF_INET, "192.xx.xxx.xx", &server_addr.sin_addr.s_addr);
// 将监听套接字与 ip+端口绑定
bind(listen_fd, (struct sockaddr*)&server_addr, sizeof(addr));

​ 现在网络上已经有一个“管道”通向服务器,其他主机想要通信并不是直接写这个“管道”,而是通过该“管道”再申请一个专门通信的“管道”。原因很简单,一个服务大众的人民公园不可能只设一个大门。于是,主机通过listen_fd监听到有人来通信,就新创建一个“管道”来通信。就好像住酒店,要先在前台(listen_fd)订房间(client_fd),然后房间(client_fd)里睡觉,而不能在前台(listen_fd)睡觉。

监听并接受一个新客户

listen(listen_fd);
// 此时有用户连接
//client_addr接受客户的地址信息:IP + 端口
struct sockaddr_in client_addr;
int client_fd = accept(listen_fd, (struct sockaddr*)&client_addr, &len);

读写,关闭

​ 此时就可以对client_fd进行读写;

char buf[1024];
read(client_fd,buf,sizeof(buf)); write(client_fd, buf, sizeof(buf)); close(client_fd);

通过socket进行网络通信(服务端)的更多相关文章

  1. Socket通信时服务端无响应,客户端超时设置

    背景:在写一个客户端的socket程序,服务端没有返回消息,客户端一直在等待. 目标:我需要设置一个时间,如果超过这个时间客户端自动断开连接.最好是在服务端实现,客户端对我来说不可控.

  2. 用c++语言socket库函数实现服务端客户端聊天室

    客户端 /* * 程序名:client.cpp,此程序用于演示socket的客户端 * 作者:C语言技术网(www.freecplus.net) 日期:20190525 */ #include < ...

  3. Socket聊天程序——服务端

    写在前面: 昨天在博客记录自己抽空写的一个Socket聊天程序的初始设计,那是这个程序的整体设计,为了完整性,今天把服务端的设计细化记录一下,首页贴出Socket聊天程序的服务端大体设计图,如下图: ...

  4. Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

    随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...

  5. 打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

    随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...

  6. c#Socket客户端和服务端的信息发送

    这是我制作的界面信息,c# Socket通信的简单使用,刚开始学习,不对的地方请大家指教,目前是可以运行的,之后自己在慢慢添加新的东西.同时了解Tcp协议的三次握手.希望对跟我一样的初学者有所帮助. ...

  7. socket创建UDP服务端和客户端

    UDP服务端代码示例: from socket import * #1.创建数据报套接字 sockfd = socket(AF_INET, SOCK_DGRAM) #2.绑定服务端地 sockfd.b ...

  8. socket创建TCP服务端和客户端

    看情况选择相对应的套接字*面向连接的传输--tcp协议--可靠的--流式套接字(SOCK_STREAM)*面向无连接的传输--udp协议--不可靠的--数据报套接字(SOCK_DGRAM) 在liun ...

  9. socket 客户端和服务端通信

    客户端要连接服务器:首先要知道服务器的IP地址.而服务器里有很多的应用程序,每一个应用程序对应一个端口号 所以客户端想要与服务器中的某个应用程序进行通信就必须要知道那个应用程序的所在服务器的IP地址, ...

  10. 基于 IOCP 的通用异步 Windows Socket TCP 高性能服务端组件的设计与实现

    设计概述 服务端通信组件的设计是一项非常严谨的工作,其中性能.伸缩性和稳定性是必须考虑的硬性质量指标,若要把组件设计为通用组件提供给多种已知或未知的上层应用使用,则设计的难度更会大大增加,通用性.可用 ...

随机推荐

  1. 零基础入门学习Java课堂笔记 ——day05

    面向对象(上) 面向过程:我打算列个计划表一步一步来 面向对象:我喜欢先分析分类,把复杂的问题简单化 1.什么是面向对象!!? 面向对象的本质就是:以类的方式组织代码,以对象的方式组织数据 封装 继承 ...

  2. 3.4 CSP-J 补赛游寄

    3.4 CSP-J 补赛游寄 Day -? 听说要去打比赛. Day -7 今天家长会,老师公布成绩 /fn/fn/fn.政治考废了,然后其他都挺好. 语文 $ 95 $,数学 $ 118 $,英语 ...

  3. Flutter聊天室|dart+flutter仿微信App界面|flutter聊天实例

    一.项目概述 flutter-chatroom是采用基于flutter+dart+chewie+image_picker+photo_view等技术跨端开发仿微信app界面聊天室项目.实现了消息发送/ ...

  4. Exadata刷机快速参考

    本文以Exadata X8 HC 1/4 rack为例,介绍整个Exadata刷机的步骤. 我理解刷机最关键的就两大步骤:第一步是所有机器刷OS,第二步是使用OEDA一键刷机.至于其它所有工作都是在为 ...

  5. ListView 判断有没有选中的行方法

    ListView1.SelCount 返回选中行的行数 应该是 没有测试 但是测试了 如果没有选中行 返回0 如果选中一行了 返回1

  6. 用superxmlparser.pas的XMLParseString----XML转Json注意

    了解XML转成Json时候用的时候多了个#号: ---------------------------------------------------------------------------- ...

  7. Windows下,SpringBoot JDBC无法连接的问题

    问题症状 在Win7和Win10下启动时均会出现下面的错误,但是在OSX和Linux下没问题 com.mysql.jdbc.exceptions.jdbc4.CommunicationsExcepti ...

  8. Swoole从入门到入土(21)——毫秒定时器

    Swoole提供了毫秒精度的定时器,所有操作都是内存操作,无额外的IO开销. 下面让我们一起详细了解每个函数的作用: 1) 函数tick:设置一个间隔时钟定时器,这个定时器会持续触发 Swoole\T ...

  9. maven打包时打包指定的lib文件夹

    今天在打包自己的spring boot项目时遇到了问题, 报找不到类和符号. 因为我有些依赖是放在项目lib文件夹中,那么打包的时候要连把它一起打包. 修改pom.xml, 添加一下内容: <b ...

  10. eclipse配置Maven本地仓库

    一.首先下载maven插件并配置maven的环境变量,可参考:http://jingyan.baidu.com/article/cb5d61050b8ee7005d2fe04e.html 二.打开ec ...