【网络编程】之三、socket网络编程
前面两篇看socket的入门一些知识还有一些常用的API,现在来解释一些概念,还有就是tcp和udp客户端服务器基本模式!
阻塞和非阻塞
套接字可以处于阻塞模式或者非阻塞模式,调用任何一个阻塞模式的函数都会产生同样的结果。(用或长或短的时间等待操作的完成) 当套接字处于非阻塞模式的时候,API函数的调用会立即返回,但是大多会失败,返回WSAEWOULDBLOCK错误。意味着请求操作在调用期间没有时间完成。
举个例子,阻塞就是当你拨打我的电话的时候,我不在,于是你拿电话等我回来,这期间不能再用电话了。
非阻塞就是你拨打我的电话,但是我不在,这时你挂断了电弧啊,待会再打,至于我是不是在,只有打了电话才知道。
在32位系统中,可以采用多线程的方法,在不同的县城中使用套接字,这样即使某个线程中的套接字被阻塞也不会影响应用程序的其他操作,同时也不会再阻塞线程上耗费CPU时间。
字节序
不同的计算机中用不同的字节顺序存储数据。
任何从winsock函数对IP地址和端口号的引用和传送给winsock函数的IP地址和端口号均是按照网络顺序组织的,这也包括了sockaddr_in这个数据结构中的IP地址域和端口域,但是不包括sin_family域。
一个应用程序通常用与’时间‘服务对应的端口来和服务器连接,而服务器提供某种机制来通知用户使用另一端口,因此getservbyname函数返回的端口号已经是网络顺序了。可以直接用来组成一个地址,不需要进行转换。
如果用户输入一个数,而制定使用这一端口号,应用程序则必须在使用它建立地址以前把它从主机顺序转换成网络顺序。相应的,如果应用程序希望显示包含于某一地址中的端口号,则这一端口号就必须在被显示前从网络地址顺序转换到主机顺序。
广播
数据报套接字可以用来向许多系统支持的网络发送广播数据包。网络上必须先要支持广播功能。
发送广播数据包的能力被限制于那些用显示标记了允许广播的套接字中,分为以下情况:
1、一个应用程序希望在本地网络中找到一个资源,而应用程序对该资源的地址没有任何检验。
2、一些重要的功能,如:路由要求把他们的信息发送给所有可以找到的邻机。
被广播的信息的目的地址取决于这一信息将在何种网络上广播。由于使用广播以前必须捆绑一个数据报套接字,所以所有受到的广播消息都带有发送者地址和端口。
客户端/服务器模型
1、TCP面向连接
(1)、服务器进程创建套接字
(2)、将本地地址绑定到所创建的套接字上,以使在网络上标识该套接字。
(3)、将套接字置入监听模式并准备接受连接请求。
(4)、客户端进程调用socket函数创建客户端套接字.
(5)、客户想进程发送链接请求
(6)、当连接请求到来后,被阻塞的服务进程的accept函数生成一个新的套接字于客户套接字建立连接。
(7)、一旦客户端的套接字受到来自服务器的接受信号,表示客户与服务器已实现连接,可以进行数据传输了。
下面看图:
2、UDP数据报套接字模型
(1)、建立套接字
(2)、通过bind函数绑定这个套接字和准备棘手数据的IP
(3)、不要再调用listen和accept了,只要等待数据。
(4)、接受发送数据
下面看图:
下一篇将给出代码和讲解;
2012/8/15
jofranks 于南昌
【网络编程】之三、socket网络编程相关推荐
- 深入分析websocket协议,从3个方面设计网络应用层协议丨网络编程|网络IO|epoll|socket|网络协议丨c/c++linux服务器开发
深入分析websocket协议,从3个方面设计网络应用层协议 视频讲解如下: 深入分析websocket协议,从3个方面设计网络应用层协议丨网络编程|网络IO|epoll|socket|网络协议丨c/ ...
- day014 网络编程【Socket网络编程】
1 网络通信协议 1.1 IP地址 1.2 端口号 1.3 InetAddress基本使用 在java中,可以使用一个类表示ip地址,这个类叫做InetAddress static InetAddre ...
- 网络篇之三次握手(ACK)
网络篇之socket 网络篇之bind 网络篇之listen 网络篇之accept 网络篇之connect 网络篇之三次握手(SYN+ACK) 一 客户端发送ACK 客户端接收到服务端发送的SYN+A ...
- 网络篇之三次握手(SYN+ACK)
网络篇之socket 网络篇之bind 网络篇之listen 网络篇之accept 网络篇之connect 一 服务端发送SYN+ACK 客户端调用connect发起连接请求时,发送了第一次握手(S ...
- Linux C++/Java/Web/OC Socket网络编程
一,Linux C++ Socket网络编程 1.什么是TCP/IP.UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制 ...
- python 之socket 网络编程
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...
- python运维开发之socket网络编程01
python运维开发之socket网络编程01说明:本文来自来自北京老男孩linux运维实战培训中心-运维开发课程免费视频内容,本文内容为系列内容,更多分享信息见:http://oldboy.blog ...
- Socket网络编程(2)--服务端实现
中秋了,首先祝大家中秋快乐,闲着无事在家整一个socket的聊天程序,有点仿QQ界面,就是瞎折腾,不知道最后是不是能将所有功能实现. 如果你对socket不了解,请看这篇文章:http://www.c ...
- Linux Kernel TCP/IP Stack — Socket Layer — TCP/UDP Socket 网络编程
目录 文章目录 目录 TCP/UDP Socket 逻辑架构 创建 Socket 绑定 Socket 请求建立 Socket 连接 监听 Socket 接受请求 关闭连接 数据的发送和接收 send ...
- Socket网络编程笔记
网络.计算机网络的构成是什么? 网络: 在计算机领域中,网络是信息传输.接收.共享的虚拟平台,通过它可以把各个点.面(组织之间).体(例如公共app)的信息联系到一起,从而实现这些资源的共享. 局域网 ...
最新文章
- 2018年强化学习领域十篇重要论文(附源码)
- 用alternatives进行java版本的转换
- Java新鲜东西,带有标签的continue和break
- (转)【前端模板之路】一、重构的兄弟说:我才不想看你的代码!把HTML给我交出来!...
- 启明云端方案分享| 小尺寸串口屏在充电桩的应用
- Mysql主从复制原理以及实现
- php js 复选框选中,为每个选中的复选框显示相同的一组问题。 (PHP和JS / Jquery)...
- markdown 转义字符
- 一般一个前端项目完成需要多久_制作分销小程序最快要多久
- linux获取进程信息函数
- Python中使用PhantomJS抓取Javascript网页数据
- Centerface:开源实用的边缘设备无锚人脸检测与对齐算法
- javascript的bind方法
- 连接虚机中的mysql服务
- 计算机找不到970pro,缝缝补补又三年,老机器更新---三星970 pro SSD简测
- 通过统计7万多真实人名生成可信的随机人名
- 路由器刷机群辉NAS+KODI (一)----NAS安装
- 聊聊在小米实习的日子
- 比较无线局域网和无线广域网的特征
- Android手机APN简介