北京科技大学软件课程设计作业.docx
《北京科技大学软件课程设计作业.docx》由会员分享,可在线阅读,更多相关《北京科技大学软件课程设计作业.docx(12页珍藏版)》请在冰点文库上搜索。
![北京科技大学软件课程设计作业.docx](https://file1.bingdoc.com/fileroot1/2023-6/15/4612f796-0f3e-4805-88e4-c43ef0ed347c/4612f796-0f3e-4805-88e4-c43ef0ed347c1.gif)
北京科技大学软件课程设计作业
北京科技大学
软件课程设计报告
——C语言
班级:
自1103
姓名:
高云峰
学号:
41151092
指导教师:
曾慧
日期:
2012年9月8日
目录
1设计内容[1级标题]1
2应用程序总体分析与设计[1级标题]1
3应用程序各功能模块分析与设计[1级标题]1
3.1功能模块[2级标题]1
3.1.1[3级标题]1
3.2模块流程图[2级标题]1
3.2.1[3级标题]1
3.3程序结构图[2级标题]1
3.3.1[3级标题]1
4程序测试1
4.1测试过程[2级标题]1
4.1.1VS2010截图[3级标题]1
4.2测试结果[2级标题]1
4.2.1服务器端截图[3级标题]1
4.2.2客户器端截图[3级标题]1
5程序文档1
5.1使用说明[2级标题]1
5.2程序说明[2级标题]1
6程序源代码1
1设计内容[1级标题]
通过C语言编程实现一个局域网聊天程序,包括服务器端程序和客户端程序,程序能够实现两台主机间或多台主机间的基本通信。
2应用程序总体分析与设计[1级标题]
C程序的编写和调试在VisualStudio2010集成开发环境中完成,通信协议选择TCP,并利用WinSockAPI函数完成网络通信。
应用程序总体设计是根据功能,采用自顶而下的方法,进行模块划分并确定各模块功能。
运用数据流程图等描述工具进行模块程序设计。
编程完成后,对各模块进行上机调试,完成整个系统的开发。
3应用程序各功能模块分析与设计[1级标题]
3.1功能模块[2级标题]
3.1.1[3级标题]
功能模块分两部分——服务器端和客户端。
服务器端:
(1)初始化模块用于初始化各个全局变量赋初始值。
初始化Winsock,加载Winsock库。
(2)功能模块控制。
该模块为其他模块提供调用的函数,包括参数获取功能和错误输出功能。
(3)服务模块。
该模块为客户端提供服务功能,包括接收来自客户端的数据,并发送数据到客户端。
客户端:
(1)初始化模块。
该模块用于初始化客户端的Winsock,加载Winsock库。
(2)功能模块控制。
与服务器端一样,该模块提供了参数获取和错误输出功能。
(3)数据传输控制模块。
该模块控制着整个客户端的数据传输,包括数据发送和接收等。
3.2模块流程图[2级标题]
3.2.1[3级标题]服务器端。
服务器端系统流程图所示。
程序首先调用为库文件wsock32.lib使用所需资源。
程序首先调用函数获取用户提供的先项,如果没有提供选项,则直接使用默认值,如果有选项提供并成功获取(选项错误则显示用户帮助并终止程序),则初始化变量和Winsock,并创建TCP流套接字;接下来将创建的TCP流套接字和设定的服务器地址绑定(调用bind()函数);绑定成功后,则开始用listen()函数侦听客户的连接。
接收客户端请求成功后,进行接收数据、发送数据等操作。
接收数据完毕后,关闭窗口完成通信。
3.2.2客户端。
客户端系统流程如图所示。
客户端程序执行时调用库函数获取用户选项,如果获取的选项错误,则终止程序,如果选项正确则开始创建TCP流套接字,成功创建TCP流套接字后则作和服务器类似的操作,即解析主机名或IP地址、设置服务器端地址;然后进行连接服务器操作,若能成功连接则输出连接信息,并发送消息到服务器端;然后接收来自服务器端的响应,(消息),并将接收到的消息输出。
最后关闭套接字和释放占用的资源。
和服务器一样,在操作过程中,任何一步操作失败都将退出程序,并提示错误信息。
3.3程序结构图[2级标题]
同3.2
4程序测试
4.1测试过程[2级标题]
4.1.1VS2010截图[3级标题]
4.2测试结果[2级标题]
4.2.1服务器端截图[3级标题]
4.2.2客户器端截图[3级标题]
5程序文档
5.1使用说明[2级标题]
程序能实现两台主机或多台主机间的基本通信。
运行环境Windows7/XP,运行客户端.exe程序,与服务器端连接上后,即可进行相关数据传输。
输入需要发送的文字,按Enter结束,数据即发送到服务器端,服务器端即可收到客户端发送的信息。
服务器端输入需要发送的数据,按Enter键发送,客户端也可收到相应信息。
5.2程序说明[2级标题]
本程序执行条件是已知两台电脑的ip地址,除了不能中文聊天其他方面比较得体。
6程序源代码
服务器:
#include
#include
#include
#pragmacomment(lib,"ws2_32.lib")
voidmain()
{
SOCKETs1;
structsockaddr_intcpaddr;
interr=0;
charip_addr[16]={"0"};
intisockErr;
intport=5000;
structsockaddr_inclientsocket;
intlen;
SOCKETserConn;
charreceiveBuf[100];
charsendBuf[100];
WORDwVersionRequested;
WSADATAwsaData;
wVersionRequested=MAKEWORD(2,2);
err=WSAStartup(wVersionRequested,&wsaData);
if(!
err)
{
printf("已打开套接字\n");
}
else
{
printf("嵌套字未打开!
");
return;
}
s1=socket(AF_INET,SOCK_STREAM,0);
tcpaddr.sin_family=AF_INET;
tcpaddr.sin_port=htons(port);
tcpaddr.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(s1,(LPSOCKADDR)&tcpaddr,sizeof(tcpaddr))==SOCKET_ERROR)
{
isockErr=WSAGetLastError();
return;
}
else
{printf("绑定完成\n");
}
if(listen(s1,5)==0)
{printf("监听成功\n");
}
else
{printf("SOCKET_ERROR");
}
serConn=socket(AF_INET,SOCK_STREAM,0);
printf("创建了已连接套借口\n");
serConn=accept(s1,(LPSOCKADDR)&clientsocket,&len);//如果这里不是accept而是conection的话。
。
就会不断的监听
while
(1)
{printf("请输入想要说的话:
\n");
gets(sendBuf);
send(serConn,sendBuf,100,0);
recv(serConn,receiveBuf,100,0);
//send(serConn,"serve:
OK",strlen("serve:
OK")+1,0);
printf("%s\n",receiveBuf);
}
closesocket(serConn);
}
客户端:
#include
#include
#pragmacomment(lib,"ws2_32.lib")
voidmain()
{
interr;
SOCKETclientSocket;
structsockaddr_inclientsock_in;
charip_addr[16]={"127.0.0.1"};
charreceiveBuf[100]={"0"};
charspeak[100];
WORDwVersionRequired;
WSADATAwsaData;
wVersionRequired=MAKEWORD(2,2);
err=WSAStartup(wVersionRequired,&wsaData);
if(!
err)
{
printf("客户端嵌套字已经打开!
\n");
}
else
{
printf("客户端的嵌套字打开失败!
\n");
return;
}
clientSocket=socket(AF_INET,SOCK_STREAM,0);
printf("请输入主机IP:
\n");
scanf("%s",ip_addr);
clientsock_in.sin_family=AF_INET;
clientsock_in.sin_addr.s_addr=inet_addr(ip_addr);
clientsock_in.sin_port=htons(5000);
//bind(clientSocket,(sockaddr*)&clientsock_in,strlen(sockaddr));
//listen(clientSocket,5);
if(connect(clientSocket,(LPSOCKADDR)&clientsock_in,sizeof(clientsock_in)))
{printf("与服务器连接出错");
system("pause");
}
else
{printf("开始连接,请稍候.....\n");
}
recv(clientSocket,receiveBuf,100,0);
printf("%s\n",receiveBuf);
while
(1)
{
printf("请输入想要说的话:
\n");
gets(speak);
send(clientSocket,speak,100,0);
recv(clientSocket,receiveBuf,100,0);
printf("%s\n",receiveBuf);
}
closesocket(clientSocket);
WSACleanup();
}
VS2010完整工程文件,附件单独提交。