socket总结
Socket简介
1,socket是什么?
2,socket的作用
3,socket怎么用
4,socket的扩展
——————————————————-
socket是什么?
Socket这个名词现在有很多不同的意思,这里主要讲到其中2个含义。一是,套接字socket=(IP地址:端口号),是端的概念。二是,socket在应用层和传输层之间,是层的概念。
要理解socket是什么,首先要理解网络的分层结构,目前internet广泛使用的TCP/IP模型,总结起来网络模型分为四层,从上层往下依次为:应用层、传输层、网络层、接入层。
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一个端点(endpoint)称为一个socket。(端)
然后理解系统调用(system call)和应用程序接口(API)的概念。系统调用就是应用程序和操作系统之间传递控制权。当应用程序启动系统调用时,就把控制权从应用程序传递给系统调用接口,此接口又把控制权传递给操作系统,操作系统执行内部的操作,执行完毕控制权又通过系统调用返回给应用程序。这个系统调用接口就是API。API定义了很多系统调用的函数,通过请求调用就可以获得操作系统的服务。目前最著名就是伯克利为UNIX定义的socket interface。(层)
回到网络中,传输层TCP协议和网络层的IP协议已经集成到操作系统中,应用程序在应用层,这就涉及到应用进程与操作系统的调用,而socket interface就作为应用进程和运输层协议之间的接口。因此,应用进程要使用TCP/IP协议进行通信就必须通过socket和操作系统进行调用请求服务。

————————————————————-
socket的作用?
socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。Socket把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
————————————————————-
socket的怎么用?
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。socket是可以理解为一种特殊的文件,socket函数就是对其进行的操作(读/写IO、打开、关闭)。
Socket通信的双方可以分为客户端和服务器端,客户端的基本流程如下:
- 创建socket
 - 连接到服务器
 - 发送数据到服务器
 - 从服务器接受数据
 - 关闭连接
 
服务器端的步骤稍微多一些,主要增加了与端口绑定(bind)和监听(listen)、接受阻塞(accept)等流程

——————————————————————
socket的扩展——即socket编程
socket编程是利用socket接口为应用层自定协议用于应用进程的网路通信。那为什么要自定义呢,自定义目的是满足自己的应用需求。例如http协议是应用层使用最多最广泛的协议,http是单工阻塞性质的协议,如果你需要一个全双工,无阻塞的双向传输,那http就满足不了。http定义自己的包头,你要是觉得传输效率极其重要,这样的包头太臃肿,你也需要自定义协议。自定义应用层协议就需要socket编程,目前应用的场景有,即时通讯,社交订阅更新,视频会议,网络游戏,股票基金实时价格等等。
另外还有,网络模型ATM,不同于TCP/IP模型,这就相应的有自己的协议和socket,这也用到socket编程。
——————————————————————-
参考资料
1, 谢希仁《计算机网络(第五版)》
2, http://www.cnblogs.com/dolphinX/p/3460545.html
3, http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html
socket总结的更多相关文章
- socket读写返回值的处理
		
在调用socket读写函数read(),write()时,都会有返回值.如果没有正确处理返回值,就可能引入一些问题 总结了以下几点 1当read()或者write()函数返回值大于0时,表示实际从缓冲 ...
 - Socket聊天程序——Common
		
写在前面: 上一篇记录了Socket聊天程序的客户端设计,为了记录的完整性,这里还是将Socket聊天的最后一个模块--Common模块记录一下.Common的设计如下: 功能说明: Common模块 ...
 - Socket聊天程序——客户端
		
写在前面: 上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业前考的软考证书,然后接下来就是在加班的日子度过了,今天正好周五,打算把客户端的详细 ...
 - Socket聊天程序——服务端
		
写在前面: 昨天在博客记录自己抽空写的一个Socket聊天程序的初始设计,那是这个程序的整体设计,为了完整性,今天把服务端的设计细化记录一下,首页贴出Socket聊天程序的服务端大体设计图,如下图: ...
 - Socket聊天程序——初始设计
		
写在前面: 可能是临近期末了,各种课程设计接踵而来,最近在csdn上看到2个一样问答(问题A,问题B),那就是编写一个基于socket的聊天程序,正好最近刚用socket做了一些事,出于兴趣,自己抽了 ...
 - Java中的Socket的用法
		
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
 - Android Socket连接PC出错问题及解决
		
最近测试问题:Android 通过Socket链接电脑,ip和端口都是正确的,也在同一网段,可android端就是报异常如下: 解决办法:测试电脑的防火墙可能开着,在控制面板把防火墙打开即可.
 - Linux下的C Socket编程 -- server端的继续研究
		
Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...
 - Mono 3.2.3 Socket功能迎来一稳定的版本
		
由于兴趣自己业余时间一直在搞.net下面的通讯应用,mono的存在得以让.NET程序轻松运行在Linux之下.不过经过多尝试Socket相关功能在Mono下的表现并不理想.不管性能还是吞吐能力方面离我 ...
 - Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!
		
随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...
 
随机推荐
- [iOS微博项目 - 2.3] - 用户取消对app的授权
			
github: https://github.com/hellovoidworld/HVWWeibo A.用户取消对app的授权 用户可以在微博网站上取消对某个应用(app)的授权 1.打开& ...
 - 巧解Tomcat中JVM内存溢出问题
			
你对Tomcat 的JVM内存溢出问题的解决方法是否了解,这里和大家分享一下,相信本文介绍一定会让你有所收获. tomcat 的JVM内存溢出问题的解决 最近在熟悉一个开发了有几年的项目,需要把数据库 ...
 - Linux下用arptables防arp攻击
			
Linux下网络层防火墙iptables很强大,链路层也有类似的防火墙arptables,可针对arp地址进行限制,防止ARP网关欺骗攻击,再配合静态绑定MAC和向网关报告正确的本机MAC地址,有效解 ...
 - Computational Geometry Template_Polygon
			
#include <stdlib.h> #include <math.h> #include <iostream> #define MAXN 1000 #defin ...
 - Linux之sed,awk(流编辑器)
			
sed: s----substitute(替换) 1. 文本替换(使用-i选项,可以将结果应用于原文件) many people在进行替换之后,借助重定向来保存文件(未使用-i选项): $ sed ...
 - Android 图标上面添加提醒使用开源UI类库 Viewbadger
			
Viewbadger 1.BadgeView主要是继承了TextView,所以实际上就是一个TextView,底层放了一个label,可以自定义背景图,自定义背景颜色,是否显示,显示进入的动画效果以及 ...
 - easyui combobox筛选(拼音)
			
1.combobox本身的筛选 $('#cc').combobox({ filter: function(q, row){ var opts = $(this).combobox('options') ...
 - CMSIS Example - Mail and Message
			
/*---------------------------------------------------------------------------- * RL-ARM - RTX *----- ...
 - RFIDler - An open source Software Defined RFID Reader/Writer/Emulator
			
https://www.kickstarter.com/projects/1708444109/rfidler-a-software-defined-rfid-reader-writer-emul h ...
 - 深入理解JavaScript-replace
			
replace方法是属于String对象的,可用于替换字符串. 简单介绍: StringObject.replace(searchValue,replaceValue) StringObject:字符 ...