网络协议编程.doc
文本预览下载声明
《网络协议编程》实验1
1.实验名称
基于WinSock API的TCP网络程序的编写与分析。
2.实验目的
(1)掌握常用的WinSock API函数。
(2)掌握基于WinSock API函数和TCP协议的网络通信控制台程序的编写方法。
3.实验性质与实验课时
(1)实验性质:验证性。
(2)实验课时:2学时。
4.实验环境/***************************************************************
daytime协议的服务器程序分析注解 服务器端程序代码如下:
服务器的IP地址:由系统指定
服务器端口号:13
程序名称: daytime.cpp
程序功能:实现由RFC—867定义的daytime协议
命令格式:daytime
***************************************************************/
#include winsock2.h
#include stdio.h
#include time.h
#pragma comment(lib,WS2_32.lib)
#define MAX_BUFFER 1024 /*服务器缓冲区的最大值为1024个字符*/
//#define NULL 0
#define DAYTIME_SERVER_PORT 13 /*常量表示服务器的端口号为13*/
int main()
{
SOCKET serverFd;
int connectionFd,i=1; /*统计客户请求次数*/
struct sockaddr_in servaddr;
char timebuffer[MAX_BUFFER+1];
time_t currentTime;
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2,2),wsaData)==SOCKET_ERROR)
{
printf(命令套接口初始化失败\n);
WSACleanup();//终止使用Winsock DLL库,释放系统资源
return-1;
}
serverFd=socket(AF_INET,SOCK_STREAM,0); /*创建服务器端的套接字,三个参数分别代表 使用TCP/IP;传输过程使用TCP;不适用其他特殊协议*/
if(serverFd==-1)
{
printf(socket error!\n);
WSACleanup();//终止使用Winsock DLL库,释放系统资源
return(-1);
}
memset(servaddr,0,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY); /*将4字节主机字节数顺序转换到网络字节顺序*/
servaddr.sin_port=htons(DAYTIME_SERVER_PORT);/*将4字节主机字节数顺序转换到网络字节顺序*/
if(bind(serverFd,(struct sockaddr *)servaddr, sizeof(servaddr))==SOCKET_ERROR)/*地址绑定*/
{
printf(bind( ) Failed: %d\n, WSAGetLastError( ));
WSACleanup();//终止使用Winsock DLL库,释放系统资源
return(-1);
}
listen(serverFd,5);/*监听客户端的连接请求,定义最大的链接次数为5次*/
printf(daytime服务器已经启动,正在监听来自客户端的服务请求......\n);//运行界面上提示服务器软件处于启动状态
while(1)
{
connectionFd=accept(serverFd,(struct sockaddr *)NULL,NULL);/*连接建立后将存放在缓冲区的时间发送到客户端*/
if(connectionFd=0)
{
currentTime=time(NULL);
sprintf(timebuffer,%s\n,ctime(currentTime));
printf(已有%d个访问者\n,i++);
send(connectionFd,timebuffer,strlen(timebuffer),0);
closesocket(connectionFd);
}
}
WSACleanup();//终止使用Winsock DLL库,释放系统资源
return(1);
}
②在Visual
显示全部