《计算机网络编程》复习题文档格式.docx

上传人:b****1 文档编号:832040 上传时间:2023-04-29 格式:DOCX 页数:21 大小:85.36KB
下载 相关 举报
《计算机网络编程》复习题文档格式.docx_第1页
第1页 / 共21页
《计算机网络编程》复习题文档格式.docx_第2页
第2页 / 共21页
《计算机网络编程》复习题文档格式.docx_第3页
第3页 / 共21页
《计算机网络编程》复习题文档格式.docx_第4页
第4页 / 共21页
《计算机网络编程》复习题文档格式.docx_第5页
第5页 / 共21页
《计算机网络编程》复习题文档格式.docx_第6页
第6页 / 共21页
《计算机网络编程》复习题文档格式.docx_第7页
第7页 / 共21页
《计算机网络编程》复习题文档格式.docx_第8页
第8页 / 共21页
《计算机网络编程》复习题文档格式.docx_第9页
第9页 / 共21页
《计算机网络编程》复习题文档格式.docx_第10页
第10页 / 共21页
《计算机网络编程》复习题文档格式.docx_第11页
第11页 / 共21页
《计算机网络编程》复习题文档格式.docx_第12页
第12页 / 共21页
《计算机网络编程》复习题文档格式.docx_第13页
第13页 / 共21页
《计算机网络编程》复习题文档格式.docx_第14页
第14页 / 共21页
《计算机网络编程》复习题文档格式.docx_第15页
第15页 / 共21页
《计算机网络编程》复习题文档格式.docx_第16页
第16页 / 共21页
《计算机网络编程》复习题文档格式.docx_第17页
第17页 / 共21页
《计算机网络编程》复习题文档格式.docx_第18页
第18页 / 共21页
《计算机网络编程》复习题文档格式.docx_第19页
第19页 / 共21页
《计算机网络编程》复习题文档格式.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《计算机网络编程》复习题文档格式.docx

《《计算机网络编程》复习题文档格式.docx》由会员分享,可在线阅读,更多相关《《计算机网络编程》复习题文档格式.docx(21页珍藏版)》请在冰点文库上搜索。

《计算机网络编程》复习题文档格式.docx

2字节

16382

65534

中型网络

C类

110

192~223

3字节

2097150

254

小型网络

D类

1110

224.0.0.0~239.255.255.255

224~239

多点播送

E类

11110

240~247

保留地址

直接广播地址:

主机号为全1的IP地址;

多播:

1)一对多的通信,一个源点发送到多个终点;

2)标识一个多播的标识符即为一个D类地址;

3)使用IGMP(网际组管理协议)协议,首部的协议字段值为2

4)多播地址只能用于目的地址,不能用于源地址;

5)对多播数据报不产生ICMP差错报文;

多播分两种:

局域网范围的硬件多播;

因特网范围的多播,因为大部分主机是通过局域网接入到因特网的,因此在多播的最后阶段,还是要在局域网范围内进行硬件多播。

1.4.多播(或称组播)IP地址,如何映射到MAC地址

组播IP地址,即D类地址,范围是224.0.0.0~239.255.255.255;

MAC地址的前25位是固定的,后23位与IP地址的后23位相同

IP地址

1110yyyy

yxxxxxxx

xxxxxxxx

MAC地址

00000001

00000000

01011110

0xxxxxxx

(16进制)

01

00

5e

1.5.标识网络中的两个通信的进程或一条连接

五元组(协议,本地IP地址,本地端口号,远程IP地址,远程端口号)

1.6.socket(套接字)的三种协议类型及其应用场合

socket(intaf,inttype,intprotocol)函数中,当第二个参数为AF_INET时,第三个参数type的值可以为:

SOCK_STREAM(流式套接字)、SOCK_DGRAM(数据报套接字)、SOCK_RAW(原始套接字),详情见下表:

协议类型

应用场合

socket函数中的protocol值

SOCK_STREAM

TCP

IPPROTO_TCP

SOCK_DGRAM

UDP

IPPROTO_UDP

SOCK_RAW

rawsockets

IPPROTO_ICMP

1.7.写代码:

创建socket

1)TCP

SOCKETtcpSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

2)UDP

SOCKETudpSocket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);

3)原始套接字

SOCKETicmpSocket=socket(AF_INET,SOCK_RAM,IPPROTO_ICMP);

1.8.TCP的C/S通信模型

1.9.UDP的C/S通信模型

1.10.服务器端的两种绑定方式的区别

端口参数

方式1

INADDR_ANY

非0值

所有网卡都可接收连接,所有人都可连接

方式2

某网卡接收,指定人群连接

函数bind原型为:

intbind(SOCKETs,conststructsockaddr*name,intnamelen)

代码如下:

SOCKETlistenSocket;

structsockaddr_inservice;

listenSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

//绑定方式1:

service.sin_port=htons(9999);

service.sin_addr.s_addr=inet_addr(INADDR_ANY);

//绑定方式2:

service.sin_addr.s_addr=inet_addr("

127.0.0.1"

);

bind(listenSocket,(SOCKADDR*)&

service,sizeof(service));

1.11.函数listen中第二个参数的含义

函数原型为:

intlisten(SOCKETs,intbacklog);

第二个参数backlog:

设置等待连接队列的最大长度,若设置为SOMAXCONN,则表示可用的最大长度。

1.12.在网络通信中,怎样传输一个字符串(可能含有汉字)

统一字符编码为UTF-8,传输时,先传输字符串的长度,再传输字符串内容。

2.程序设计

2.1.写代码:

两个线程,交替打印数字

步骤:

WSAStartup(),初始化winsock

socket(),创建TCP型的socket

bind(),绑定服务器的IP、PORT

listen(),监听socket

while(continue){

accept(),接收客户端的连接

创建新线程,传入通信用的socket,与客户端进行通信

}

closesocket(),关闭socket

WSACleanup(),释放winsock资源

代码:

/**

*main.cpp

*多线程程序

*两个线程,分别打印线程号+数字

*/

#include<

stdio.h>

process.h>

WinSock2.h>

unsignedintCALLBACKmyThread(void*p);

intmain(){

HANDLEhandles[2];

handles[0]=(HANDLE)_beginthreadex(NULL,0,myThread,NULL,0,NULL);

handles[1]=(HANDLE)_beginthreadex(NULL,0,myThread,NULL,0,NULL);

WaitForMultipleObjects(2,handles,true,INFINITE);

CloseHandle(handles[0]);

CloseHandle(handles[1]);

return0;

unsignedintCALLBACKmyThread(void*p)

{

for(inti=1;

i<

=10;

i++)

{

printf("

Thread:

%u打印:

%d\n"

GetCurrentThreadId(),i);

Sleep(2000);

}

程序截图:

2.2.程序设计步骤:

多线程TCP服务器端程序

*多线程TCP服务器端程序

#pragmacomment(lib,"

ws2_32"

//线程:

处理一个客户机的网络通信。

unsignedintCALLBACKtcpThread(void*p);

intiResult;

WORDwVersionRequested;

WSADATAwsaData;

SOCKETlistenSocket;

SOCKETacceptSocket;

structsockaddr_inservice;

HANDLEhandles[10];

wVersionRequested=MAKEWORD(2,2);

/*InitializingWinsock*/

iResult=WSAStartup(wVersionRequested,&

wsaData);

if(iResult!

=0){

WSAStartupfailedwitherror:

%d\n"

iResult);

return-1;

/*createatcpsocket*/

listenSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

if(listenSocket==INVALID_SOCKET){

createsocketfaliedwitherror:

WSAGetLastError());

WSACleanup();

/*bindthesocket*/

service.sin_family=AF_INET;

service.sin_port=htons(9999);

service.sin_addr.s_addr=inet_addr("

iResult=bind(listenSocket,(SOCKADDR*)&

if(iResult==SOCKET_ERROR){

bindfailedwitherror:

closesocket(listenSocket);

/*listenforincomingconnectionrequests*/

iResult=listen(listenSocket,SOMAXCONN);

listenfailedwitherror:

listeningonsocket...\n"

/*acceptnewincomingconnections*/

intagain=0;

while(again<

10){

structsockaddr_inclient_addr;

intclient_addr_size=sizeof(client_addr);

SOCKETclientSock=accept(listenSocket,(structsockaddr*)&

client_addr,&

client_addr_size);

if(clientSock!

=INVALID_SOCKET){

handles[again]=(HANDLE)_beginthreadex(NULL,0,tcpThread,(void*)clientSock,0,NULL);

again++;

WaitForMultipleObjects(10,handles,TRUE,INFINITE);

for(inti=0;

i<

10;

i++){

CloseHandle(handles[i]);

unsignedintCALLBACKtcpThread(void*p){

SOCKETclient=(SOCKET)p;

/*dosomething:

*recv()/send()

2.3.程序设计步骤:

UDP多循环服务器程序

socket(),创建UDP型的socket

recvfrom(),接收UDP包

sendto(),发送UDP包

*UDPServer

WSADatawsaData;

listenSocket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);

createsocketfailedwitherror:

intlen=sizeof(client_addr);

while

(1){

*recvfrom()

*sendto()

2.4.连接型UDP一般用于哪一方?

什么场合?

一般用于客户端;

要求内核进行UDP包的过滤;

2.5.广播程序,每隔3秒广播本地时间

socket(),创建socket

setsockopt(),允许广播

getCurrentTime(),获取本地时间

sendto(),发送数据

Sleep(),暂停3秒

*广播服务器端程序

*每3秒广播服务器端的时间

time.h>

voidgetcurtime(char*curtime){

time_ttm;

//time.h

time(&

tm);

sprintf(curtime,"

%s\n"

ctime(&

tm));

SOCKETserverSocket;

charon=1;

charmsg[256];

serverSocket=socket(AF_INET,SOCK_DGRAM,0);

setsockopt(serverSocket,SOL_SOCKET,SO_BROADCAST,&

on,sizeof(on));

//允许发广播包

service.sin_addr.s_addr=htonl(INADDR_BROADCAST);

while

(1){

getcurtime(msg);

sendto(serverSocket,msg,strlen(msg),0,(sockaddr*)&

serverSocket,sizeof(serverSocket));

msg);

Sleep(3000);

/*sleep3secondsbetweensend*/

closesocket(serverSocket);

2.6.多播(或称组播)程序,每隔3秒多播本地时间

sendto(),发送数据到某D类地址

*多播服务器端程序

226.6.6.6"

每3秒向组226.6.6.6发包,告之本机的时间\n"

3.协议分析

3.1.IP数据报头部最大/小长度、头部选项最大/小长度,最多记录路由个数

头部最小长度:

20Bytes

头部最大长度:

60Bytes

选项最小长度:

0Bytes

40Bytes

最多记录路由:

9个

3.2.程序设计步骤:

MyPing

(源主机发送类型为8代码为0的“回送请求报文”,当目标主机收到该报文时,将标识符、序号、数据区复制以组成类型为0代码为0的“回送应答报文”,发送给源主机。

1)创建原始套接字;

2)设置套接字的超时选项(如6秒);

3)构造ICMP数据报:

类型为8代码为0回送请求;

4)构造IP数据报,将上述的ICMP数据报作为IP数据报的数据部分;

设置超时选项;

5)发送IP数据报到目标IP地址、端口;

6)若收

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2