SOCKET?

SOCKET是指:地址、端口、SOCKET。

是线程的对应物。你可以用多个线程处理同一个端口,也可以用多个SOCKET指向同一个地址(与端口)。一个是对象,一个是线程。意思是两种方法都可以用来处理同一个端口上面的传输。是对端口的分割使用。

有三种SOCKET:流、数据报、RAW。

流指TCP,指有连 接的SOCKET。数据报指没有连 接的,简单地面向进程(即带PORT)的应用。而RAW什么都没有,RAW就给你一个IP包,随你怎么办。这三者都可以放在一个相同的地址上,叫地址复用或端口复用。

看到一个文章说UDP其实没有任何依据去处理这个复用,因为UDP是无状态的。其实你一定要复用或者说OS一定要复用,当然是可以的,毕竟一个数据包理论上可以被发给任何人,发往任何地方,想怎么发就怎么发,没有问题。但是一定还是要处理好IDENTITY的问题。意思是,SOCKET拥 有与端口不一样的IDENTITY。端口是更早的东西,端口是进程时代的产物,但SOCKET是线程时代的产物,是对端口复用的实现。

不要在SOCKET上面编程,除非不得已。但也不要随便采用任何的流API如NIO,甚至是旧式的流IO,或者MINA这样的框架。特别是在你要用UDP协议的时候,因为大多数协议都基于TCP,因此都是基于流的。TCP有很多问题,在很多真正的网络应用中。但是我现在也没有最终的解决方案,只是就事论事,写一下笔记。

意思是,SOCKET不是独占的。可以把它看成一个OS给你的端口句柄,因此你可以使用端口,并且端口可以根据此来识别你。它是“插”在端口上的,是端口的一部分,不是全部。

了解SOCKET的意义还在于,知道SOCKET不只是流相关的,它主要是一个端口复用器。端口能干的,它全能干。它是你向网络编程的利器,而不像MINA,NIO这些中看不中用的东西。这么说并不是赞成使用SOCKET,只是尝试说明,你要知道什么是IO,什么是网络IO,什么是流,什么是数据包,什么是协议,知道比不知道好。

我还是赞成使用一些比较完善的通信包比如HTTP,SMTP,TELNET这些东西来通信。因为这些东西都建立了相对比较完整的会话与表示系统。省掉了好些工作。很多应用里面会话与表示都不重要,但是不重要不代表没有。你要么自己解决这个,要么使用一些比较成熟的库。反正问题是不会自动得到解决的。

另一个角度来看这个问题那就是:不管使用哪种方法,人家的还是自己的,到最后你必须要懂你应该懂的东西。比如你如果只需要一个最简单的请求响应模式,你可能就不会选HTTP。因为HTTP有太多HT相关的东西,浪费流量。你不会把应用做成这个样子的是吧。

反正你要懂。

 

转载于:https://my.oschina.net/digerl/blog/95645

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值