计算机网路课程设计毕业设计Word格式.docx

上传人:b****5 文档编号:18326856 上传时间:2022-12-15 格式:DOCX 页数:11 大小:82.97KB
下载 相关 举报
计算机网路课程设计毕业设计Word格式.docx_第1页
第1页 / 共11页
计算机网路课程设计毕业设计Word格式.docx_第2页
第2页 / 共11页
计算机网路课程设计毕业设计Word格式.docx_第3页
第3页 / 共11页
计算机网路课程设计毕业设计Word格式.docx_第4页
第4页 / 共11页
计算机网路课程设计毕业设计Word格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

计算机网路课程设计毕业设计Word格式.docx

《计算机网路课程设计毕业设计Word格式.docx》由会员分享,可在线阅读,更多相关《计算机网路课程设计毕业设计Word格式.docx(11页珍藏版)》请在冰豆网上搜索。

计算机网路课程设计毕业设计Word格式.docx

IP功能:

IP的主要目的是为数据输入/输出网络提供基本算法,为高层协议提供无连接的传送服务。

这意味着在IP将数据递交给接收站点以前不在传输站点和接收站点之间建立对话(虚拟链路)。

它只是封装和传递数据,但不向发送者或接收者报告包的状态,不处理所遇到的故障。

TCP:

TCP(传输控制协议TransmissionControlProtocol)是重要的传输层协议,传输层软件TCP的目的是允许数据同网络上的另外站点进行可靠的交换。

它能提供端口编号的译码,以识别主机的应用程序,而且完成数据的可靠传输。

TCP协议具有严格的内装差错检验算法确保数据的完整性。

TCP是面向字节的顺序协议,这意味着包内的每个字节被分配一个顺序编号,并分配给每包一个顺序编号。

用户数据报文协议:

UDP(用户数据报协议UserDatagramProtocol)也是TCP/IP的传输层协议,它是无连接的,不可靠的传输服务。

当接收数据时它不向发送方提供确认信息,它不提供输入包的顺序,如果出现丢失包或重份包的情况,也不会向发送方发出差错报文。

UDP的主要作用是分配和管理端口编号,以正确无误的识别运行在网络站点上的个别应用程序。

由于它执行功能时具有较低的开销,因而执行速度比TCP快。

它多半用于不需要可靠传输的应用程序,例如网络视频点播和视频会议等。

b.网络编程基础

socket概述:

linux中的网络编程通过socket接口实现。

Socket既是一种特殊的IO,它也是一种文件描述符。

一个完整的Socket都有一个相关描述{协议,本地地址,本地端口,远程地址,远程端口};

每一个Socket有一个本地的唯一Socket号,由操作系统分配。

套接字有三种类型:

流式套接字(SOCK_STREAM):

流式的套接字可以提供可靠的、面向连接的通讯流。

它使用了TCP协议。

TCP保证了数据传输的正确性和顺序性。

数据报套接字(SOCK_DGRAM):

数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错。

使用数据报协议UDP协议。

原始套接字:

原始套接字允许对低层协议如IP或ICMP直接访问,主要用于新的网络协议实现的测试等。

structsockaddr{

unsignedshortsa_family;

/*address族,AF_xxx*/

charsa_data[14];

/*14bytes的协议地址*/

};

sa_family一般来说,IPV4使用“AF_INET”。

sa_data包含了一些远程电脑的地址、端口和套接字的数目,它里面的数据是杂溶在一起的。

structsockaddr_in{

shortintsin_family;

/*Internet地址族*/

unsignedshortintsin_port;

/*端口号*/

structin_addrsin_addr;

/*Internet地址*/

unsignedcharsin_zero[8];

/*添0(和structsockaddr一样大小)*/

这两个数据类型是等效的,可以相互转换,通常使用sockaddr_in更为方便

地址字节序列转化:

因为每一个机器内部对变量的字节存储顺序不同(有的系统是高位在前,底位在后,而有的系统是底位在前,高位在后),而网络传输的数据大家是一定要统一顺序的。

所以对与内部字节表示顺序和网络字节顺序不同的机器,就一定要对数据进行转换。

下面给出套接字字节转换程序的列表:

htons()——“HosttoNetworkShort”主机字节顺序转换为网络字节顺序(对无符号短型进行操作2bytes)

htonl()——“HosttoNetworkLong” 主机字节顺序转换为网络字节顺序(对无符号长型进行操作4bytes)

ntohs()——“NetworktoHostShort” 网络字节顺序转换为主机字节顺序(对无符号短型进行操作2bytes)

ntohl()——“NetworktoHostLong” 网络字节顺序转换为主机字节顺序(对无符号长型进行操作4bytes)

三.程序设计原理图

四.程序源代码

五.Server.cpp

#include<

stdio.h>

winsock2.h>

string.h>

conio.h>

iostream>

//创建套接字描述符

SOCKETserver;

SOCKETclient;

WSADATAWSAData;

intWSAreturn;

//用来存放ip地址和端口号

structsockaddr_inlocal;

structsockaddr_infrom;

//远程主机的地主长度

intfromlen=sizeof(from);

//信息缓冲区

charinformation[50];

//有客户登录时返回的第一条信息

charwelcome[]="

欢迎您登陆李仕贤主机!

----零度工作室\n"

;

//收到信息的缓冲区

charreceive[256];

charchat[256];

charc;

inti=0;

boolcansend=false;

intGetIp()

{

//初始化说明版本号

WSAreturn=WSAStartup(0x101,&

WSAData);

if(WSAreturn)

printf("

[server@root]#发生一个未知错误!

\n"

);

return0;

}

//AF-INET代表Internet(TCP/IP)地址族

local.sin_family=AF_INET;

//ip为INADDR_ANY,系统会自动填入本机IP地址

local.sin_addr.s_addr=INADDR_ANY;

//端口号设为8888,以后通信就通过此端口

local.sin_port=htons((8888));

//创建套接字,指定是流式套接字是用tcp协议

server=socket(AF_INET,SOCK_STREAM,0);

if(server==INVALID_SOCKET)

[server@root]#无法创建套接字!

//套接字绑定端口和ip地址,所以信息到达主机后就能找到进程,,

if(bind(server,(sockaddr*)&

local,sizeof(local))!

=0)

[server@root]#无法绑定套接字!

//侦听侦听数为5

if(listen(server,5)!

[server@root]#无法监听端口!

while(true)

[server@root]#正在等待用户连接...\n"

//接受客户端的连接,没有连接时则阻塞。

client=accept(server,(structsockaddr*)&

from,&

fromlen);

//有连接,则发送一条欢迎的信息

strcpy(information,inet_ntoa(from.sin_addr));

strcat(welcome,information);

printf("

[server@root]#接受来自%s的连接...\n"

inet_ntoa(from.sin_addr));

[server@root]#正在发送欢迎消息...\n"

//发送信息

send(client,welcome,strlen(welcome),0);

[server@root]#欢迎消息信息已经成功发送至客户端!

while

(1)

if(!

cansend)

[server@root]#正在等待对方发来消息...\n"

cansend=false;

//接受信息,,如果信息没有,则阻塞。

recv(client,receive,sizeof(receive),0);

*********接受到的消息***********\n"

[server@root]#%s\n"

receive);

**************结束**************\n"

cansend=true;

else

[server@root]#请输入下一条消息:

"

scanf("

%s\0"

&

chat);

send(client,chat,strlen(chat),0);

\n[server@root]#已经成功发送出信息!

//关闭套接字

closesocket(client);

closesocket(server);

WSACleanup();

return1;

voidmain()

intok;

ok=GetIp();

//套接字的创建,信息的发送和接收

if(ok==0)

[server@root]#无法完成请求!

Client.cpp

structsockaddr_into;

charinformation[256];

我已经登陆到你的主机!

//设置信息的缓冲区

charchatto[256];

charservername[256];

charchatfrom[256];

longresult;

boolcansend=true;

//连接主机。

intconnection()

//初始化。

//创建套接字,用来与服务器连接

client=socket(AF_INET,SOCK_STREAM,0);

//表示使用tcp协议

to.sin_family=AF_INET;

//设置端口号,要转化为网络的大端的地址格式

to.sin_port=htons(8888);

[server@root]#请输入要登陆的IP:

%s"

servername);

//主机的ip地址,要进行字节序列转化和地址格式转化

to.sin_addr.s_addr=inet_addr(servername);

[server@root]#正在连接...\n"

//连接主机,连接失败返回-1

result=connect(client,(structsockaddr*)&

to,sizeof(to));

if(SOCKET_ERROR==result)

//连接失败

[server@root]#无法连接到目标主机!

//接收由服务器发来的信息

recv(client,receive,sizeof(receive),0);

*******欢迎消息消息*******\n"

***********结束*********\n"

if(cansend)

[server@root]#请输入下一条信息:

//从键盘获得信息

chatto);

//将信息发送到服务器

send(client,chatto,strlen(chatto),0);

\n[server@root]#已经成功发送信息!

//cansend置零下一步接收信息

正在等待对方发来消息...\n"

//接收信息,信息还没到达时候就阻塞

recv(client,chatfrom,sizeof(chatfrom),0);

*******接收到的消息*******\n"

chatfrom);

//下一步发送信息

//关闭套接字

connection();

}

六.参考文献

1.计算机网络(第三版)安淑之黄彦中国铁道出版社

2.linux编程指南张辉

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

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1