没有合适的资源?快使用搜索试试~ 我知道了~
socket 服务器侦听socket 服务器侦听
5星 · 超过95%的资源 需积分: 15 70 下载量 104 浏览量
2011-08-14
22:05:19
上传
评论 1
收藏 100KB DOC 举报
温馨提示
试读
20页
socket 服务器侦听socket 服务器侦听socket 服务器侦听socket 服务器侦听socket 服务器侦听socket 服务器侦听socket 服务器侦听socket 服务器侦听socket 服务器侦听socket 服务器侦听socket 服务器侦听socket 服务器侦听
资源推荐
资源详情
资源评论
我们知道 #和 ++的差异之一,就是他本身没有类库,所使用的类库
是 框架中的类库–。在 中
为网络编程提供了二个名称空间: 和 。
#就是通过这二个名称空间中封装的类和 方法实现网络通讯的。
首先我们解释一下在网络编程时候,经常遇到的几个概念:
同步()、异步()、阻塞()和非阻塞
()
所谓同步方式,就是发送方发送数据包以后,不等接受方响应,就接着发送下
一个数据包。异步方式就是当发送方发送一个数据包以后,一直等到接受方响
应 后,才接着发送下一个数据包(:作者好像把同异步说反了吧)。而
阻塞套接字是指执行此套接字的网络调用时,直到调用成功才返回,否则此套
节字就一直阻塞在网络调用上,比如调用 类的 方
法读取网络缓冲区中的数据,如果调用的时候没有数据到达,那么此
方法将一直挂在调用上,直到读到一些数据,此函数调用才返回;而非阻塞
套接字是指在执行此套接字的网络调用时,不管是否执行成功,都立即返回。
同样调用 类的 方法读取网络缓冲区中数据,不管
是否读到数据都立即返回,而不会一直挂在此函数调用上。
在 网络通信软件开发中,最为常用的方法就是异步非 阻塞套接字。
平常所说的 !(客户端!服务器)结构的软件采用的方式就是异步非阻塞模式
的。
其实在用 #进行网络编程中,我们并不需要了解什么同步、异步、阻塞和非
阻塞的原理和工作机制,因为在 中已经已经把这些机
制给封装好了。下面我们就用 #开一个具体的网络程序来说明一下问题。
一.本文中介绍的程序设计及运行环境
(")微软视窗 #$$$服务器版
(#) # 以上版本
二.服务器端程序设计的关键步骤以及解决办法:
在下面接受的程序中,我们采用的是异步阻塞的方式。
(")首先要要在给定的端口上面创建一个%&'%对象侦听网络上面的
请求。当接收到连结请求后通过调用 %&'%对象的%(&%方
法产生一个用于处理接入连接请求的 的实例。下面是具体实现代码:
!!创建一个 &' 对象,此对象主要是对给定端口进行侦听
&') *&'"#+,-
!!开始侦听
&'-
!!返回可以用以处理连接的 实例
)&'(&-
(#)接受和发送客户端数据:
此时 实例已经产生,如果网络上有请求,在请求通过以后, 实
例构造一个 对象, 对象为网络访问提供了
基础数据流。我们通过名称空间 ./ 中封装的二个类
和 来实现对 对象的访问。
其中 类中的 '方法就是从 对象
中读取一行字符; 类中的 '方法就是对
对象中写入一行字符串。从而实现在网络上面传输字符串,
下面是具体的实现代码:
0
111!!如果返回值是%%,则产生的套节字已经接受来自远方的连接请求
1112
1110
111111'3".(%已经和客户端成功连接!%-
111111
1111110
111111111!!创建 对象通过网络套节字来接受和发送数据
111111111 ) -
111111111!!从当前数据流中读取一行字符,返回值是字符串
111111111) -
11111111144)'-
111111111'3".(%收到客户端信息:%54-
111111111) -
111111111233"*36)%%
1111111110
111111111111'3".(%往客户端反馈信息:%5
33"*3-
111111111111!!往当前的数据流中写入一行字符串
111111111111'33"*3-
111111111111!!刷新当前数据流中的数据
111111111111-
1111111117
1111117
1117
7
83&
0
111943 *4-
7
(+)最后别忘了要关闭所以流,停止侦听网络,关闭套节字,具体如下:
!!关闭线程和流
-
-
-
:"(-
&'&-
-
-
;8*
网络编程之
TCP1
#$$<=$>=#"
网络编程之 TCP
前一篇《;? 网络程序开发之 》中说到:支持 @&、*&
和 & 的类组成了 *A!.A 三层模型请求响应层、应用协议层、传输层的中
间层=应用协议层,该层的类比位于最底层的 类提供了更高层次的抽象,
它们封装 *A和 A套接字的创建,不需要处理连接的细节,这使得我们在
编写套接字级别的协议时,可以更多地尝试使用
*A、 A 和 *&',而不是直接向 中写。它
们之间的这种层次关系示意如下:
B缺图C
可见,*&类基于 类构建,这是它能够以更高的抽象程度提供
*A服务的基础。正因为这样,许多应用层上的通讯协议,比如 *A
*2A文件传输协议、@**A@&3*2A
超文本传输协议等都直接创建在 *& 等类之上。
*A类使用 *A从 .资源请求数据。*A协议建立与远程终结
点的连接,然后使用此连接发送和接收数据包。*A负责确保将数据包发送到
终结点并在数据包到达时以正确的顺序对其进行组合。
从名字上就可以看出,*& 类专为客户端设计,它为 *A网络服务提供
客户端连接。*&提供了通过网络连接、发送和接收数据的简单方法。
若要建立 *A连接,必须知道承载所需服务的网络设备的地址.A(以
及该服务用于通讯的 *A端口 A。.分配号码机构 .
(4(D.((定义公共服务的端口号(你可以访问
&E!! 4!4!&= 获得这方面更详细的资
料)。.((列表中所没有的服务可使用 "D$#,到 <FDF+F这一范围中的端口
号。要创建这种连接,你可以选用 *& 类的三种构造函数之一:
"、&*&
当使用这种不带任何参数的构造函数时,将使用本机默认的 & 地址并将使用默
认的通信端口号 $。这样情况下,如果本机不止一个 & 地址,将无法选择使用。
以下语句示例了如何使用默认构造函数来创建新的 *&:
*&&) *&-
#、&*&.A8A
使用本机 .A8A 创建 *& 的实例对象。上一篇介绍过了,
.A8A 将网 络端点表示为 .A 地址和端口号,在这里它用于指定在建立远
程主机连接时所使用的本地网络接口(.A地址)和端口号,这个构造方法为使
用本机 .A( 和 A 提供了选择余地。下面的语句示例了如何使用本地
终结点创建 *&类的实例:
.A@8&.2)G@% %-111!!主机信
息
.A('HI&')&.2('-111!!.A 地址数组
.A(&)&'H$I-111!!多 .A 地址时一般用第一个
.A8A&8A) .A8A&D,$>>-111!!得到网络终结点
0
111*&&() *&&'8A-
7
83&0
111'*4-
7
到这里,你可能会感到困惑,客户端要和服务端创建连接,所指定的 .A 地址及
通信端口号应该是远程服务器的呀!事实上的确如此,使用以上两种构造函数,
你所实现的只是 *& 实例对象与 .A 地址和 A 端口的绑定,要完成连
接,你还需要显式指定与远程主机的连接,这可以通 过 *& 类的
方法来实现, 方法使用指定的主机名和端口号将客户端连接
到远程主机:
剩余19页未读,继续阅读
资源评论
- vancevan1102013-11-21本地能运行,多谢分享!!!
- pandoracanfly32013-07-20本地能运行,多谢分享!!!
lingshui060501226
- 粉丝: 2
- 资源: 32
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Sora AI-关于文生视频的使用场景说明
- suno AI文生视频的相关教程和介绍使用
- 什么是后端开发-关于后端开发的一些小介绍分享
- Jurassic Pack Vol. II Dinosaurs 侏罗纪包卷恐龙二号Unity游戏模型资源unitypackage
- Jurassic Pack Vol. III Dinosaurs 侏罗纪包卷恐龙三号Unity游戏模型资源unitypackag
- Ultimate Seating Controller 终极座椅控制器Unity游戏开发插件资源unitypackage
- 什么是人工智能-关于人工智能的相关介绍说明
- Figma Converter for Unity适用Unity的Figma转换器Unity游戏开发插件unitypackage
- Creepy Animatronic Anims 令人毛骨悚然的电子动画Unity游戏动画插件资源unitypackage
- Rankings & Leaderboards 排名和排行榜Unity游戏开发插件资源unitypackage
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功