C语言socket课程设计报告.docx

上传人:b****5 文档编号:7178606 上传时间:2023-01-21 格式:DOCX 页数:9 大小:120.35KB
下载 相关 举报
C语言socket课程设计报告.docx_第1页
第1页 / 共9页
C语言socket课程设计报告.docx_第2页
第2页 / 共9页
C语言socket课程设计报告.docx_第3页
第3页 / 共9页
C语言socket课程设计报告.docx_第4页
第4页 / 共9页
C语言socket课程设计报告.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

C语言socket课程设计报告.docx

《C语言socket课程设计报告.docx》由会员分享,可在线阅读,更多相关《C语言socket课程设计报告.docx(9页珍藏版)》请在冰豆网上搜索。

C语言socket课程设计报告.docx

C语言socket课程设计报告

第1章概述

TCP(TransmissionControlProtocol)和UDP(UserDatagramProtocol)协议属于传输层协议。

其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。

通过面向连接、端到端和可靠的数据包发送。

通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。

一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。

TCP支持的应用协议主要有:

Telnet、FTP、SMTP等;UDP支持的应用层协议主要有:

NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。

面向连接的TCP

  “面向连接”就是在正式通信前必须要与对方建立起连接。

比如你给别人打电话,必须等线路接通了、对方拿起话筒才能相互通话。

  TCP(TransmissionControlProtocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。

一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。

我们来看看这三次对话的简单过程:

主机A向主机B发出连接请求数据包:

“我想给你发数据,可以吗?

”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:

“可以,你什么时候发?

”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:

“我现在就发,你接着吧!

”,这是第三次对话。

三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。

 TCP协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用TCP协议传输数据。

面向非连接的UDP协议

  “面向非连接”就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。

这与现在风行的手机短信非常相似:

你在发短信的时候,只需要输入对方手机号就OK了。

  UDP(UserDataProtocol,用户数据报协议)是与TCP相对应的协议。

它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去。

UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。

比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。

例如,在默认状态下,一次“ping”操作发送4个数据包(如图所示)。

大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。

这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。

正因为UDP协议没有连接的过程,所以它的通信效率高;但也正因为如此,它的可靠性不如TCP协议高。

QQ就使用UDP发消息,因此有时会出现收不到消息的情况。

 

第2章程序设计部分

2.1设计目的

通过本课程设计,在学习《计算机通信与网络C》课程的基础上,进一步深入理解计算机通信与网络的基本理论及其协议,进一步熟练掌握UDP、TCPClient/Server模式的数据通信原理,熟悉进程通信的所要解决的问题,掌握网络通信的程序编程技术。

2.2设计要求

1)Java语言支持TCP/UDP及其上层的网络设计,所设计的网络通信应用系统建议采用Java语言利用Eclipse集成开发环境编程实现。

课程设计按下述步骤进行:

利用socket编程方法,编写一个TCP、UDPClient/Server模式的通信程序。

调试并运行自己编写的实现程序。

了解TCP、UDPClient/Server模式的工作原理,比较二者的不同,如出现异常情况,在课程设计报告中写出原因分析。

备份保留程序代码电子文档,以备教师随时检查。

2)Client/Server网络通信程序设计内容要具体详实,具有一定的编程工作量(程序代码一般应在100行以上)和技术难度。

3)在课程设计报告中,通过截屏图给出Client/Server网络通信或手机收发电子邮件的运行结果。

4)对课程设计进行总结,写出符合规范格式要求的课程设计报告。

课程设计报告撰写要求如下:

每个学生必须独立完成课程设计报告。

课程设计报告书写规范、文字通顺、图表清晰、数据完整、结论明确。

课程设计报告后应附参考文献。

提供电子文档资料。

例如程序源代码、设计思路、功能结构图或程序流程图等。

附录:

给出程序源代码(可附主要部分或代表自己编程特色的代码)。

课程设计报告封面按照学校统一要求格式编写,并装订成册。

要求书面工整、美观;如果条件许可,最好打印装订成册。

2.3设计原理

TCP通信流程:

UDP通信流程:

2.4设计方案

Socket连接:

  根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:

服务器监听,客户端请求,连接确认。

  服务器监听:

是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

  客户端请求:

是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。

为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

连接确认:

是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。

而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

 

第3章程序设计实现部分

3.1C语言的网络功能与编程简介

网络编程,一定离不开套接口;那什么是套接口呢?

在Linux下,所有的I/O操作都是通过读写文件描述符而产生的,文件描述符是一个和打开的文件相关联的整数,这个文件并不只包括真正存储在磁盘上的文件,还包括一个网络连接、一个命名管道、一个终端等,而套接口就是系统进程和文件描述符通信的一种方法。

目前最常用的套接口是字:

字节流套接口(基于TCP)和数据报套接口(基于UDP),当然还有原始套接口(原始套接口提供TCP套接口和UDP套接口所不提供的功能,如构造自己的TCP或UDP分组)等。

3.2系统原理框图

3.3程序设计

服务器端:

#include

#include

#pragma comment(lib,“ws2_32.lib”) 

voidmain()

{

WORDwVersionRequested;

WSADATAwsaData;

interr;

wVersionRequested=MAKEWORD(1,1);

err=WSAStartup(wVersionRequested,&wsaData);

if(err!

=0){

return;

}

if(LOBYTE(wsaData.wVersion)!

=1||

HIBYTE(wsaData.wVersion)!

=1){

WSACleanup();

return;

}

SOCKETsockSrv=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_INaddrSrv;

addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(6000);

bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

listen(sockSrv,5);

SOCKADDR_INaddrClient;

intlen=sizeof(SOCKADDR);

while

(1)

{

SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);

charsendbuffer[100];

sprintf(sendbuffer,"Welcome%shere",inet_ntoa(addrClient.sin_addr));

send(sockConn,我是沈郁,strlen(我是沈郁)+1,0);

charrecvchar[100];

recv(sockConn,recvchar,100,0);

printf("%s\n",recvchar);

closesocket(sockConn);

}

}

客户端:

#include

#include

#pragma comment(lib,“ws2_32.lib”) 

voidmain()

{

WORDwVersionRequested;

WSADATAwsaData;

interr;

wVersionRequested=MAKEWORD(1,1);

err=WSAStartup(wVersionRequested,&wsaData);

if(err!

=0){

return;

}

if(LOBYTE(wsaData.wVersion)!

=1||

HIBYTE(wsaData.wVersion)!

=1){

WSACleanup();

return;

}

SOCKETsockClient=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_INaddrSrv;

addrSrv.sin_addr.S_un.S_addr=inet_addr("127.19.226.97");

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(6000);

connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

charrecvBuffer[100];

recv(sockClient,recvBuffer,100,0);

printf("%s\n",recvBuffer);

send(sockClient,"ThisisKary",strlen("ThisisKary")+1,0);

closesocket(sockClient);

WSACleanup();

}

3.4调试结果

服务器:

3.5课程设计总结

通过本次计算机网络课程设计,我更加充分的理解了课本上的知识,并能够加以扩展,从而应用于实践当中,这几天的课程设计令我受益匪浅,很多平时模棱两可的知识点都认真复习并实践了。

本次课程设计是运用VisualC++6.0作为开发平台以及进行编写程序,在此设计过程中主要经过了审题、需求分析与可行性研究,然后形成设计思路,设计所要实现的功能,最后进行程序的编写与调试,这个过程是不断出现问题并不断的进行修改,深深的感受到亲自动手实践的重要性。

在实验的过程中发现学好基础理论知识的重要性,在设计过程中,不断遇到问题,通过老师和同学的帮助,解决了过程中出现的各种问题。

通过本次课程设计,我发现了自己的不足,希望在以后的学习中能够加强学习,提高实际应用能力,和解决问题的能力。

附录:

参考文献

1.(美)AndrewS.Tanenbaum著,熊桂喜王小虎译。

计算机网络。

北京:

清华大学出版社,1998年7月第1版。

2.计算机网络原理与技术。

刘化君编著,高电子工业出版社,2012年6月第2版。

3.计算机网络与通信。

刘化君等编著,高等教育出版社,2011年6月第2版。

4.C程序设计。

谭浩强著,清华大学出版社,2005年7月第3版。

5.C程序设计语言。

BrianW.Kernighan / DennisM.Ritchie 著,清华大学出版社。

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

当前位置:首页 > 高等教育 > 研究生入学考试

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

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