网络编程技术期末考试题(网络编程答案)
.net软件工程师笔试题和面试题答案目
说明:
1. 本试题分可选题和必选题两部分。必选题需要根据题目要求回答。
2. 本试题考试时间为 0.5 小时。
3. 本试题完成后,请标明你的姓名以及联系方式(包括:Email、联系电话)。
注意事项:
1、在规定时间内自行选题(在可选题部分中),选题数目不能少于2个,难度不限,编程语言不限(除非题目中有特别说明)。
2、尽可能用代码段或函数完成,或自然语言来描述解题方法。
3、评分标准跟所选题目的数量和完成度无关,请尽可能展示自己的编程能力、思路、经验和风格。
可选题部分:
(1) 请使用目录树遍历的方法统计出指定逻辑驱动器的目录总数及文件总数,并显示硬盘空间浪费的百分比
类别:系统类
难度:中级
(2) 列出局域网中的所有工作组和计算机名,并可显示每一个计算机的共享目录
类别:系统类
难度:高级
(3) 写一个类似OICQ点对点消息发送软件,仅实现发送和接收的功能即可
类别:网络编程类
难度:高级
(4) 为DataGrid(WinForm)增加ComboBox样式的数据列
类别:数据库编程类
难度:中级
(5) 一维数组iArray[10],类型为int。请使用选择排序算法对其排序,并输出结果。
类别:数据算法
难度:初级
(6) 请新建一个类(名称为ClassA),该类必须含有三个属性:姓名(字符串),性别(布尔值),年龄(数值)。
用该类建立一个链表,该链表有以下算法:创建、添加、插入、删除和查找,算法内不用
考虑内存的分配与释放
类别:数据结构
难度:中级
Public Class ClassA{
Public string name;
Public boolean sex;
Public int age;
}
(7) 在上题的基础上,实现以下两个功能:
a. 保存该链表为二进制文件test.lib(存放在本题目路径之下)
b. 读取生成的二进制文件到链表中。
类别:数据结构
难度:中级
(8) 你所知道有哪些操作平台,谈谈你对他们的见解
类别:其它类
难度:无
(9) 你所知道有哪些编程语言,谈谈你对他们的看法,你使用过哪些语言,熟练程度
如何,编写过什么样的程序
类别:其它类
难度:无
(10) 请用VBScript或JavaScript语言中任何一种,与CSS结合,编写出移动Layer的例子,具体效果与Windows窗体类似。
类别:Web
难度:中级
必选题部分(必须用VS2003开发):
(1) C#回答题:请描述抽象类、接口、结构三者的区别:
抽象类当中的属性和方法不能被其子类重写,接口只定义其中的属性和方法,其方法的实现部分必须在其继承的子类中实现,结构和类比较类似,也有其属性和方法,但不能被继承和实例化.
(2) C#编程题:在WinForm 中实现类似于Windows 资源管理器的功能,左边有目录树,点击目录树,在右边显示该目录下的所有文件。查看方式分:大图标、小图标、列表、详细资料等。
(3) 写一个简单的存储过程或触发器,要求能正确运行(数据库采用Oracle,自建测试表)
Create table test
(id int primary key,
Name varchar2(10) not null,
Address varchar2(50),
Tel varchar2(18)
);
Create or replace procedure InsertTest as
Declare IDN test.id%type;
Declare VName test.name%type;
Declare VAddress test.address%type;
Declare VTel test.tel%type;
Begin
Select nvl(decode(max(id),0,1,max(id)),1) + 1 into IDN
End
When
4 更多相关文章推荐参考:
安捷伦笔试真题
中兴数据库笔试真题
工商银行历年考试真题
计算机专业的帮帮忙啊,谢谢了!
选择题:
1:A(主板支持的最大内存容量理论上由芯片组所决定,北桥决定了整个芯片所能支持的最大内存容量。但在实际应用中,主板支持的最大内存容量还受到主板上内存插槽数量的限制)
2:C 3:C 4:C 5:D 6:A 7:A 8:A 9:C 10:B
填空题
1:告诉缓冲存储器
2:希捷; 3.5英寸; 40GB; ATA;
3:英特尔赛扬处理器,主频是2.66GHZ,缓存为128KB,FSB为400MHZ
4:数据;
5:1、新购置的硬盘需要经过分区(常用fdisk命令)、格式化(高级格式化用format命令)、安装操作系统、安装相关设备驱动程序几个步骤后就可以用来进行存放数据
2、在USB方式下, 所有的外设都在机箱外连接,连接外设不必再打开机箱;允许外设热插拔,而不必关闭主机电源。
USB采用“级联”方式,即每个USB设备用一个USB 插头连接到另一个外设的USB插座上,而其本身又提供一个USB插座供下一个USB外设连接用。通过这种类似菊花链式的连接,一个USB控制器可以连接多达127个外设,而每个外设间距离(线缆长度)可达5米。USB能智能识别USB链上外围设备的插入或拆卸。
3:错误信息的大意为:无效系统盘,更换并按任意键继续。出现此现象的原因可能是系统引导文件(IO.SYS)丢失或损坏,使用软盘启动,执行sys a: c:命令将系统引导文件传入C盘,故障排除。
问答题
4:微机开机启动时按热键进入BIOS,将光驱设置为第一引导设备,保存退出;将WINDOWS 2000系统安装光盘放入光驱,重新启动计算机,启动系统安装。系统先启动磁盘扫描程序(SCANDISK程序),检查系统中各个磁盘分区是否有问题。当检没有错误时,退出SCANDISK程序,安装将继续进行;当出现WINDOWS 2000安装向导界面时,再安装向导的引导下“继续”,“下一步”操作。当出现选择安装目录时,一般情况下都选择C:\WINDOWS安装路径(系统也默认该路径),当然你也可以安装到其他盘、其他目录中去,选择后,单击下一步。当出现“WINDOWS组件”画面时,要求输入所需安装程序,一般选择“安装最常用的组件”(它也时系统默认的),选择之后,单击“下一步”。
5:方案一:
1.CPU: intel PIV2.8
2.内存:三星金条DDR2 667内存 512MB
3.主板:华硕 P5GD2 Deluxe
4.硬盘:西捷 酷鱼7200.7/ST380011A
5.显卡:GF FX5700U
6.声卡:创新Sound Blaster Audigy2 ZS
7.光驱:华硕 DVD-E616P2静音王
8.软驱:美上美
9.刻录机:先锋 DVD-109CH
10.主机箱:大水牛
11.显示器:优派(ViewSonic)VE910
12.鼠标键盘:罗技 光电高手键鼠二代
13.音箱:罗技Z680
14.话筒:一般即可
15.耳机:一般即可
备注:
网卡主板集成
主板:
LGA 775CPUICH6R/800 FSB/4*DDR2 533支持双通道/PCI EXPRESS 16X/8*S-ATA/RAID/2*1394a/Marvell PCIe 1000M/CMI9880-8CH/8*USB2.0/ATX/附赠WIFI-G无线模组
声卡:创新Sound Blaster Audigy2 ZS
支持超高解析度DVD-Audio的播放,24位、192kHz、108dB信噪比的高品质音频回放;
获得权威的THX标准认证;
经过Dolby 认证,支持7.1声道系统、内置DTS/DTS ES解码支持;
装备游戏玩家钟情的Creative EAX4.0 ADVANCED HD、游戏中64个硬件3D音频加速通道;
具有24位/192kHz的数模转换精度;
在多媒体环境中能够实现108db的超高信噪比;
能够以24bit/96kHz音频指标进行录音;
IEEE1394/FireWire/i-Link 兼容接口,最高可达 400Mbps 传输速率;
ASIO 驱动程序带给您录音的低延迟时间 (低至2ms) ,并可应用大量专业音乐制作软件;
音箱:
罗技Z680:
高达500 瓦的强劲输出功率,峰值功率更可达1000瓦
经过极为苛刻的THX 专业认证
内置Dolby Digital 和DTS 双解码,尽情享受5.1声道数码环绕音效
内置Dolby Pro-Logic II 解码器,可将两声道音源扩展为5.1声道
同时接驳多达四种音源,如CD、DVD、电脑、家用游戏机等
全能的数字音乐控制中心和无线遥控器
方案二:
主板 捷波悍马HA01-GT3
CPU AMD Athlon64 X2 4400+(盒)
内存 金士顿1G DDR2-667×2
硬盘 日立160GB 8M SATA
显卡 昂达HD2600Pro 256MB DDR3
光驱 先锋DVD-228
显示器 明基FP92W
声卡 板载
网卡 板载
音箱 普通耳麦
机箱 富士康轿子861套装
电源
键盘/鼠标 双飞燕 斜键防水套装
配置总结:这是一套3900元的游戏型配置。由于配件控制得当,仅用不到4000元价格即实现了X2 4400+、2G双通道内存、HD2600Pro、19寸宽屏液晶的组合,确保游戏性能。配置采用了Athlon 64 X2 4200+处理器搭配NF550主板,配合2GB双通道内存,无明显系统瓶颈。昂达HD2600Pro显卡支持DX10特效及全硬件高清解压.
_____________________________________________________________________
上面的两个我都没有写电源,电源你去买个长城的,功率大的就可以了,要稳定的!对了,最好有欠压保护,防止突然断电!
呼,终于答完了,希望能帮的到你,有不对的地方请多多包涵。
JAVA网络编程基础试题!300分!请一定要帮我做一下,两个解答题。一个编程题,重点是编程题,谢谢了!!
2.百度百科搜索很详细
3.附件中的代码仅供参考
TcpSocketServerDemo.java
package?yaoshun.InetAddress;
import?java.io.DataInputStream;
import?java.io.DataOutputStream;
import?java.io.IOException;
import?java.net.ServerSocket;
import?java.net.Socket;
import?java.util.ArrayList;
import?java.util.List;
import?java.util.Random;
/*
?*?客户端:TCP服务器端
?*/
public?class?TcpSocketServerDemo?{
private?ServerSocket?serverSocket;//?服务器连接
private?int?port;?//?服务器监听端口
private?ListSocket?sockets;
private?int?ranNumber;
/**
?*?服务器结束的标志
?*/
public?boolean?ISEND;
public?TcpSocketServerDemo(int?port)?{
this.port?=?port;
serverSocket?=?null;
sockets?=?new?ArrayListSocket();
ranNumber?=?new?Random().nextInt(50);
}
/*
?*?启动服务器
?*/
public?void?starServer()?{
try?{
//?第一步:建立服务器连接(绑定监听端口)
serverSocket?=?new?ServerSocket(port);
System.out.println("姚舜的服务器已经启动...");
Socket?socket;//?客户端连接(如果建立连接时,本机网络不容或服务器程序未启动则会抛出异常)
ServerThread?serverThread;
Thread?t2;
while?(!ISEND)?{
//?第二步:监听端口(获取客户端连接)
socket?=?serverSocket.accept();
if?(ISEND)?{
while?(!socket.isClosed())?{
socket.close();
Thread.sleep(100);
}
}?else?{
sockets.add(socket);
serverThread?=?new?ServerThread(this,?socket);
t2?=?new?Thread(serverThread);
t2.start();
}
}
for?(Socket?s?:?sockets)?{
s.close();
}
serverSocket.close();
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
public?static?void?main(String[]?args)?{
TcpSocketServerDemo?tDemo?=?new?TcpSocketServerDemo(1000);
tDemo.starServer();
}
/**
?*?校验
?*?
?*?@param?i
?*?@return
?*/
public?int?check(int?i)?{
if?(i??ranNumber)?{
return?-1;
}?else?if?(i??ranNumber)?{
return?1;
}
return?0;
}
}
/**
?*?服务端处理线程
?*
?*/
class?ServerThread?implements?Runnable?{
private?TcpSocketServerDemo?tDemo;
private?Socket?socket;
private?DataInputStream?dis;//?输入流(读取数据)
private?DataOutputStream?dos;//?输出流(发送数据)
public?ServerThread(TcpSocketServerDemo?tDemo,?Socket?socket)?{
super();
this.tDemo?=?tDemo;
this.socket?=?socket;
try?{
dis?=?new?DataInputStream(socket.getInputStream());
dos?=?new?DataOutputStream(socket.getOutputStream());
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
public?void?run()?{
String?message?=?"";
int?i;
int?index?=?0;
int?result?=?0;
while?(!message.equals("Quit")??index??5)?{
try?{
message?=?dis.readUTF();
}?catch?(IOException?e)?{
e.printStackTrace();
}
try?{
i?=?Integer.parseInt(message);
result?=?tDemo.check(i);
if?(result?==?1)?{
dos.writeUTF("数字大了");
}?else?if?(result?==?-1)?{
dos.writeUTF("数字小了");
}
if?(result?==?0)?{
dos.writeUTF("猜中了");
break;
}
}?catch?(NumberFormatException?|?IOException?e)?{
continue;
}
index++;
}
try?{
dis.close();
dos.close();
socket.close();
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
}
TcpSocketClientDemo.java
package?yaoshun.InetAddress;
import?java.io.DataInputStream;
import?java.io.DataOutputStream;
import?java.io.IOException;
import?java.net.Socket;
import?java.net.UnknownHostException;
import?java.util.Scanner;
/*
?*?演示类:TCP客户端
?*/
public?class?TcpSocketClientDemo?{
private?Socket?socket;//?客户端连接(如果建立连接时,本机网络不容或服务器程序未启动则会抛出异常)
private?DataInputStream?dis;//?输入流(读取数据)
private?DataOutputStream?dos;//?输出流(发送数据)
//?private?String?serverIP;//?服务器IP地址
//?private?int?serverPort;//?服务器监听端口
private?String?sendData;//?发送的数据
public?TcpSocketClientDemo(String?serverIP,?int?serverPort)?throws?UnknownHostException,?IOException?{
//?this.serverIP?=?serverIP;
//?this.serverPort?=?serverPort;
socket?=?new?Socket(serverIP,?serverPort);
dis?=?new?DataInputStream(socket.getInputStream());
dos?=?new?DataOutputStream(socket.getOutputStream());
sendData?=?null;
startClient();
}
public?void?startClient()?{
try?{
//?第一步:创建客户端连接
System.out.println("===我的客户端界面===");
//?第二步:客户端向服务器发送数据
int?i?=?0;
Scanner?input?=?new?Scanner(System.in);
while?(i??5)?{
System.out.println("请输入你的内容(客户端的):");
sendData?=?input.nextLine();
if?(sendData.equals("quit"))?{
break;
}
dos.writeUTF(sendData);
sendData?=?dis.readUTF();
System.out.println("接收到服务器内容:"?+?sendData);
if?(i?==?5)?{
System.out.println("超过允许次数,请重新连接服务器.");
}
if?(sendData.equals("猜中了"))?{
i?=?5;
}
i++;
}
input.close();
}?catch?(Exception?e)?{
e.printStackTrace();
}?finally?{
//?第四步:关闭输入流、输出流和客户端连接
try?{
dis.close();
dos.close();
socket.close();
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
}
public?static?void?main(String[]?args)?{
try?{
new?TcpSocketClientDemo("127.0.0.1",?1000);
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
}
JSP编程技术测试题
一 选择题(每小题 分 共 分)
.当多个用户请求同一个JSP页面时 Tomcat服务器为每个客户启动一个(B)
A)进程 ? B)线程 C)程序 D服务
.不是JSP运行必须的是(D)
A)操作系统
B)JavaJDK
C)支持Jsp的Web服务器
D)数据库
.下列说法哪一项是正确的(C)
A)Apache用于ASP技术所开发网站的服务器
B)IIS用于CGI技术所开发网站的服务器
C)Tomcat用于JSP技术所开发网站的服务器
D)WebLogic用于PHP技术所开发网站的服务器
.下面描述错误的是(C)
A)HTML文件必须由开头 /标记结束
B)文档头信息包含在head与/head之间
C)在head和/head之间可以包含title和body等信息
D)文档体包含在body和/body标记之间
.设置文档体背景颜色的属性是(C )
A)text? B)bgcolor ? C) background D) link
.( D)是标题标记
A)p标记 B)br标记 ? C)hr标记? D)hn
.超级链接是互联网的灵魂 下面哪个是正确的链接标记( A )
A)a? href=# ; String readLine()方法 该方法读入一行文本 这里的 一行 指字符串以 \n 或什么做结尾 ()
A)\t ?B)\f
C)\r ? D)\p
.下列代码中rs为查询得到的结果集 代码运行后表格的每一行有几个单元格(B )
while(rs next()){
out print(# ;tr# ;);
out print(# ;td# ;+rs getString( )+# ;/td# ;);
out print(# ;td# ;+rs getString( )+# ;/td# ;);
out print(# ;td# ;+rs getString( )+# ;/td# ;);
out print(# ;td# ;+rs getString(# ;publish# ;)+# ;/td# ;);
out print(# ;td# ;+rs getFloat(# ;price# ;)+# ;/td# ;);
out print(# ;/tr# ;);
}
A) ? ?B) ? C) D)不确定
.下面是加载JDBC数据库驱动的代码片段
try{
Class forName(# ;sun jdbc odbc JdbcOdbcDriver# ;);
}
catch(ClassNotFoundException e){
out print(e);
}
该程序加载的是哪个驱动?()
A)JDBC ODBC桥连接驱动? ?B)部分Java编写本地驱动
C)本地协议纯Java驱动 ? D)网络纯Java驱动
.下面Servlet的哪个方法用来为请求服务 在Servlet生命周期中 Servlet每被请求一次它就会被调用一次 ( A )
A)service() B)init()
C)doPost() D)destroy()
.阅读下面代码片段
RequestDispatcher dispatcher=request getRequestDispatcher(# ;a jsp# ;);
dispatcher forward(request response);
关于该段代码的作用 下列叙述哪项是正确的?(B)
A)页面重定向到a jsp页面 B)将请求转发到a jsp页面
C)从a jsp定向到当前页面 D)从a jsp转发到当前页面
h 二 判断题(每小题 分 共 分) /h
.Internet和intranet的含义意义相同 ( 错 )
.Web开发技术包括客户端和服务器端的技术 (对 )
.在网页中图形文件与网页文件是分别存储的 (对)
.超级链接不仅可以将文本作为链接对象 也可以将图像作为链接对象 (对)
.盒子模型中的top right bottom left属性取值即可以是像素数 也可是百分比 并且只有父容器的position取值为非static值时才有效 (对)
.超级链接a标记的target属性取值为链接的目标窗名 可以是parent blank self top (错)
.JSP引擎执行字节码文件的主要人物之一是直接将HTML内容发给客户端 (对)
.JSP页面中的指令标记 JSP动作标记统称为脚本元素 (错)
.在 %! 和 % 标记之间声明的Java的方法在整个页面内有效 (对)
.程序片变量的有效范围与其声明位置有关 即从声明位置向后有效 可以在声明位置后的程序片 表达式中使用 (对)
.不可以用一个page指令指定多个属性的取值 (错)
.jsp:param动作标记不能单独使用 必须作为jsp:include jsp:forward标记等的子标记使用 并为它们提供参数 (对)
.Tomcat服务器支持直接使用application对象 (错)
.利用response对象的sendRedirect方法只能实现本网站内的页面跳转 但不能传递参数 (错)
.contentType属性用来设置JSP页面的MIME类型和字符编码集 取值格式为# ;MIME类型# ;或# ;MIME类型;charset=字符编码集# ; response对象调用addHeader方法修改该属性的值 (错)
.response对象的_sendRedirect(URL url)___方法可以将当前客户端的请求转到其他页面去
.JavaBean的属性必须声明为private 方法必须声明为public访问类型 (对)
.RandomAccessFile类即不是输入流类InputSteam的子类 也不是输出流类OutputStream的子类 但它同时实现了DataInput和DataOutput接口 (对)
.在MVC模式的Web开发中 视图 模型 和 控制器 分别对应着 JSP页面 JavaBean 和 Serlvet 以Servlet为核心 (对)
.doGet()和doPost()方法分别处理客户端GET和POST方法发送的请求 (对)
h 三 填空题(每空 分 共 分) /h
.W C是指___万维网联盟_______
.当今比较流行的技术研发模式是__C/S__和__B/S__的体系结构来实现的
.HTML文件是纯文本文件格式 可以用文本编辑器进行编辑制作
.将一个图像作为一个超级链接 用到了__img__标记
.URL是Uniform Resource Locator的缩写 中文称之为 统一资源定位器?
.JSP页面的基本构成元素 其中变量和方法声明(Declaration) 表达式(Expression)和Java程序片(Scriptlet)统称为JSP脚本元素
. %! 和 % 之间声明的方法在整个页面内有效 称为页面的成员方法?
.JSP页面中 输出型注释的内容写在? !# ; ? 和? # ; ? 之间
.Page指令的属性Language的默认值是_Java____
.select标记中的size属性默认值为___ ___
.表单的提交方法包括___post_______和____get______方法
.out对象的__ out flush()_____方法 功能是输出缓冲的内容
.使用Bean首先要在JSP页面中使用 ? import ? 指令将Bean引入
.创建JavaBean的过程和编写Java类的过程基本相似 可以在任何Java的编程环境下完成 编写 编译和发布
.response对象的 setContentType()? 用来定义服务器发送给客户端的MIME类型
.Servlet中使用Session对象的步骤为 调用 HttpServletRequest getSession() 得到Session对象 查看Session对象 在会话中保存数据
.MVC(Model View Controller)是八十年代为编程语言 Smalltalk 发明的一种软件设计模式
.控制器主要负责两方面的动作 ? 把用户的请求分发到相应的模型? ? 将模型的改变及时反映到视图上?
.在DOM接口规范中 有四个基本接口 __Node__ __Nodelist___ _NamedNodeMap__和_Document__
h 四 简答题(每小题 分 共 分) /h
.什么是B/S模式?
.如何保证页面跳转时当前页面与跳转页面之间的联系?
.在%!和%之间声明的变量和在%和%之间声明的变量有何区别?
.如何在页面的程序片中使用Bean?
lishixinzhi/Article/program/Java/hx/201405/30804
急求:网络问题:伯克利套接字是什么??
本文介绍 Windows Sockets 的性质和用途。其他内容还包括:
定义术语“套接字”。
描述 SOCKET 句柄数据类型。
描述套接字的用途。
Windows Sockets 规范为 Microsoft Windows 定义了一个二进制兼容网络编程接口。Windows Sockets 基于 Berkeley Software Distribution(BSD,4.3 版)中的 UNIX 套接字实现,后者是美国加州大学伯克利分校开发的。该规范包括针对 Windows 的 BSD 样式套接字例程和扩展。通过使用 Windows Sockets,应用程序能够在任何符合 Windows Sockets API 的网络上通信。在 Win32 上,Windows Sockets 提供线程安全。
许多网络软件供应商支持网络协议下的 Windows Sockets,这些协议包括:传输控制协议/网际协议 (TCP/IP)、Xerox 网络系统 (XNS)、Digital Equipment Corporation 的 DECNet 协议和 Novell Corporation 的互联网包交换协议/顺序分组报文交换协议 (IPX/SPX) 等。虽然目前的 Windows Sockets 规范定义了 TCP/IP 的套接字抽象化,但任何网络协议都可以通过提供自己版本的、实现 Windows Sockets 的动态链接库 (DLL) 来满足 Windows Sockets。用 Windows Sockets 编写的商用应用程序示例包括 X Windows 服务器、终端模拟器和电子邮件系统。
注意: Windows Sockets 的用途是将基础网络抽象出来,这样,您不必对网络非常了解,并且您的应用程序可在任何支持套接字的网络上运行。因此,本文档不讨论网络协议的细节内容。
Microsoft 基础类库 (MFC) 通过提供两个类来支持使用 Windows Sockets API 进行编程。其中一个类为 CSocket ,它提供高级抽象化来简化网络通信编程。
Windows Sockets 规范“Windows Sockets:用于 Microsoft Windows 环境下的网络计算的开放接口”现在为 1.1 版本,它是 TCP/IP 群体中一个由个人和公司组成的大团体开发的,是一个开放的网络标准,可免费使用。套接字编程模型当前支持一个“通信域”,该“通信域”使用网际协议组 (Internet Protocol Suite)。该规范可在 Platform SDK 中获得。
提示: 因为套接字使用网际协议组,所以它们对于支持“信息高速公路”上 Internet 通信的应用程序是首选方式。
套接字的定义
套接字是一个通信终结点,它是 Windows Sockets 应用程序用来在网络上发送或接收数据包的对象。套接字具有类型,与正在运行的进程相关联,并且可以有名称。目前,套接字一般只与使用网际协议组的同一“通信域”中的其他套接字交换数据。
这两种套接字都是双向的,是可以同时在两个方向上(全双工)进行通信的数据流。
可用的套接字类型有以下两种:
流式套接字
流式套接字提供没有记录边界的数据流,即字节流。字节流能确保以正确的顺序无重复地被送达。
数据文报套接字
数据文报套接字支持面向记录的数据流,但不能确保能被送达,也无法确保按照发送顺序或不重复。
“有序”指数据包按发送的顺序送达。“不重复”指一个特定的数据包只能获取一次。
注意: 在某些网络协议下(如 XNS),流可以面向记录,即作为记录流而非字节流。但在更常用的 TCP/IP 协议下,流为字节流。Windows Sockets 提供与基础协议无关的抽象化级别。
有关上述类型以及各种套接字适用情形的信息,请参见 Windows Sockets:流式套接字和 Windows Sockets:数据文报套接字。
SOCKET 数据类型
每一个 MFC 套接字对象封装一个 Windows Sockets 对象的句柄。该句柄的数据类型为 SOCKET。SOCKET 句柄类似于窗口的 HWND。MFC 套接字类提供对封装句柄的操作。
Platform SDK 中详细描述了 SOCKET 数据类型。
套接字的用途
套接字的作用非常大,至少在下面三种通信上下文中如此:
客户端/服务器模型。
对等网络方案,如聊天应用程序。
通过让接收应用程序将消息解释为函数调用来进行远程过程调用 (RPC)。