socket编程 套接字编程 (纯理论,以后补一下实现代码)-阿里云开发者社区

开发者社区> 王小闹儿> 正文

socket编程 套接字编程 (纯理论,以后补一下实现代码)

简介: 基本概念   套接字——应用层和传输层之间,提供应用传输接口 Web/RPC/中间件——应用层之上的网络开发 应用编程接口API(application programming interface) 套接字接口(socket interface)简称套接字,是一种API。
+关注继续查看

基本概念

 

套接字——应用层和传输层之间,提供应用传输接口

Web/RPC/中间件——应用层之上的网络开发

应用编程接口API(application programming interface)

套接字接口(socket interface)简称套接字,是一种API。

 

socket API

一个进程可能会创建多个套接字,不同的进程会创建自己的套接字。

当客户端创建套接字希望与服务端进行通信时,通过端口号来分辨与服务端的哪一个应用进程进行通信(为什么不通过IP地址进行分辨,因为服务端主机上有多个应用进程在运行,每个应用进程可能会使用多个套接字。单单通过IP地址不足以分辨出是与哪一个套接字进行通信)

 

套接字对内对外使用的管理机制不同

标识通信端点(对外)——IP地址+端口号——这是针对TCP/IP的

操作系统/进程如何管理套接字(对内)——套接字描述符(socket  description)

一个进程创建一个套接字的时候,会返回一个套接字描述符。操作系统在管理内部套接字的时候,都是通过套接字描述符来引用的(操作系统使用套接字描述符来管理套接字的时候, 就是一种套接字抽象机制,这种抽象机制类似于文件的抽象。Unix操作系统对于套接字管理和文件管理,是一个管理,也就是说他把套接字看成是一个特殊的文件;Windows操作系统是分开管理的。)。

 

 

socket API函数

1、socket函数——创建套接字

调用socket函数成功之后,会返回一个套接字描述符(sd)

socket函数的三个参数:

1)、Protofamily)(协议族)——用于说明我的套接字面向哪种协议

2)、tyep(套接字类型)

3)、proto(协议号)

值为0代表用的是默认协议

例子——创建流套接字代码段

 

2、closesocket函数——关闭连接(Unix中的函数名是close,没有socket,记住)

 

3、bind函数——为套接字设置本地端点地址信息(即IP地址+端口号)

熟知端口号——web服务器就是80,sftp是25,以此类推

客户端一般不必调用bind函数

如果服务器有多个网卡,也就是有多个IP地址,该如何处理,绑定哪一个IP地址呢——使用地址IP体制通配符 INADDR_ANY

 

4、listen函数——服务端监听状态

 

5、connect函数——客户端

 

6、accept函数

当服务器调用accept,取走客户端的连接请求之后,就会创建新的套接字。真正与客户端创建连接的,就是这个新套接字。

 

7、send,sendto函数——用于发送数据

 

8、recv、recvfrom函数——用于接受数据

 

9、setsockopt、getsockopt——套接字参数设置和套接字参数读取

 

 

套接字面向TCP/IP可以创建的服务类型

应用层要通信,就要创建套接字。套接字假期了应用层和传输层的一个接口。

如果我创建的套接字的面向TCP的,就是流式套接字;如果是面向UDP而创建的套接字,就是数据报套接字;如果是直接面向网络层的套接字,则是原始套接字

 

 

网络应用中Socket API(TCP)调用的基本流程

 

 

客户端软件的设计

1、解析各个功能函数

    

    

 

2、TCP客户端软件流程

   

 

3、UDP客户端软件流程

    

 

 

 

 

 

 

 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SonarQube代码扫描与代码基线关联
SonarQube代码扫描与代码基线关联
66 0
在使用Reference Source调试.Net 源代码时如何取消optimizations(代码优化)-翻译
当你在使用Reference Source functionality in VS 2008 调试.Net 的源代码的时候,你会发现很多变量没法再调试时查看。 这是因为源代码服务器上提供的代码默认是为最终销售优化过的(optimized )。
509 0
【技术贴】MyEclipse打出syso代码不能自动补全补全不能输出system.out.print
在MyEclipse6.0甚至更高的6.5GA版本中的快捷键中把我们习惯性使用的Alt+/进行代码自动补齐 但是由于于之前版本有快捷键有冲突,所以总之不能自动提示 以下是解决方法 方法如下: 1.
1088 0
Java网络编程--套接字Socket
一、套接字Socket IP地址标志Internet上的计算机,端口号标志正在计算机上运行的进程(程序)。 端口号被规定为一个16位的0--65535之间的整数,其中,0--1023被预先定义的服务通信占用。
544 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
12076 0
从json自动生成模型代码
http://www.cocoachina.com/ios/20150713/12480.html
734 0
+关注
王小闹儿
应届c++
129
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载