Socket网络编程学习之路 第一篇-----学习感悟

很早就开始接触了socket网络编程了,至今已经写了不少的相关代码,写起来也比较顺畅,仍然感觉socket还有很多的机制并没有理解,而且由于对socket的底层实现机制有一种“不信任“的疑问,所以总想研究一下socket的底层实现机制。在这一系列的博文中,我将会抛砖引玉谈一下我在学习socket编程中的一些体会以及一些网络编程必须要了解的主题与大家探讨。

下面我列出整理的一些相关socket的一些可能存在的疑问:

1.socket的发送缓冲区与接收缓冲区的概念。

2.socket的相关函数与TCP三次握手四次挥手状态的对应关系。

3.socket进程的状态,例如TIME_WAIT等。

4.socket中提供的recv,send与WSARecv以及WSASend的联系与区别。

5.socket中的同步与异步,阻塞与非阻塞的概念以及具体表现。

6.socket网络编程中的IO模型(包括阻塞的和非阻塞的),例如:重叠IO和完成端口。

7.网络字节序与主机字节序之间的转换。

8.socket底层实现机制。

9.Socket对于C ,Python ,Java ,C#以及Linux不同语言与OS平台下的实现区别(主要是是语言实现的区别)与机制实现(主要是操作系统)的区别。

10.Socket是介于TCP/IP协议栈的应用层与传输层的,那么它实现应用层的高级协议是如何实现的,对于开发出

新的高层协议的应用,例如木马的私有协议,游戏的私有协议,HTTP协议,HTTPS协议等等。

11.在closesocket,shutdown等关闭socket方式中,如何优雅地关闭socket而不会出现资源浪费或其他的安全问题呢?

12.TCP协议中的滑动窗口与socket缓冲区之间的关系。

实际上,对于网络编程,在windows平台下,有几种网络编程接口,socket是一种,winnet也是一种,其是一个应用层的网络通信组件,它可以使你的应用程序很容易的实现http、ftp、gopher等协议而不需要你去深入的了解协议本身的规范。而之前,如果要想做类似的应用,我们必须了解socket编程并且要对协议本身非常熟悉,哪怕是一个非常非常简单的程序。当然了socket是比较灵活的,两种接口在用途上表现出来的优点也是不同的。

学习socket编程主要是编写网络程序,在很多的方面我们主要是针对于一个具体的网络协议来进行编程,首先必须分析这个网络协议的方方面面,然后使用socket来进行实现,无论这个网络协议是协议栈中已经存在的高层网络协议,还是自己在应用中设计出来的网络协议,都需要了解了网络协议在进行实现的。例如我们需要写一个邮件收发软件,只有了解了SMTP和POP协议才能使用socket或者winnet这些编程接口进行开发;写一个文件服务器或者客户端,也需要了解了FTP协议的相关细节才能进行开发,少了这两步都不成。

上面暂时罗列了上面几个问题,后续博文将会对其进行分析讲解。

关于socket的一些个人理解已经给出了一些关于socket缓冲区的一些分析。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VF665c6W-1661290272564)(http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)]

]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值