文档详情

网络协议编程.doc

发布:2016-08-20约6.18千字共7页下载文档
文本预览下载声明
《网络协议编程》实验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
显示全部
相似文档