




免费预览已结束,剩余83页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络程序设计作业P93 获取计算机安装的协议#include stdafx.h#include WinSock2.h#include#pragma comment(lib,Ws2_32.lib)using namespace std;int main(int argc,char* argv)WSADATA sock_data;LPWSAPROTOCOL_INFO protocol_info_ptr;WSAStartup(MAKEWORD(2,2),&sock_data);DWORD len=0;WSAEnumProtocols(NULL,NULL,&len);protocol_info_ptr=(LPWSAPROTOCOL_INFO) new BYTElen+1;int num=WSAEnumProtocols(NULL,&protocol_info_ptr0,&len);for(int i=0;inum;i+,protocol_info_ptr+)cout#index=iendliSocketType=iSocketTypeendldwServiceFlags1=dwServiceFlags1endliAddressFamily=iAddressFamilyendliProtocol=iProtocolendldwCatalogEntryId=dwCatalogEntryIdendldwMessageSize=dwMessageSizeendldwProviderFlags=dwProviderFlagsendliMaxSockAddr=iMaxSockAddrendliMinSockAddr=iMinSockAddrendliNetworkByteOrder=iNetworkByteOrderendliProtocolMaxOffset=iProtocolMaxOffsetendliSecurityScheme=iSecuritySchemeendliVersion=iVersionendlProtocolChain.ChainEntries=ProtocolChain.ChainEntriesendlProtocolChain.ChainLen=ProtocolChain.ChainLenendlszProtocol=szProtocolendlendl;protocol_info_ptr-=num;delete protocol_info_ptr;WSACleanup();return 0;P96/服务器端代码#include WinSock.h#include windows.h#include stdio.h#pragma comment(lib,wsock32.lib)#define RECV_PORT 2000#define SEND_PORT 3000#define MAX_FILESIZE 32*1024SOCKET sock,sock1;sockaddr_in ServerAddr;sockaddr_in ClientAddr;struct Filedatachar ffname30;char ffdataMAX_FILESIZE;int len;DataPacket;int Addrlen;DWORD StartSock()WSADATA WSAData;if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)printf(sock init fail!n);return(-1);return(1);DWORD CreateSocket()sock=socket(AF_INET,SOCK_STREAM,0);if(sock=SOCKET_ERROR)printf(sock create fail!);WSACleanup();return (-1);ServerAddr.sin_family=AF_INET;ServerAddr.sin_addr.s_addr=htonl(INADDR_ANY);ServerAddr.sin_port=htons(RECV_PORT);if(bind(sock,(struct sockaddr*)&ServerAdde,sizeof(struct sockaddr_in)=SOCKET_ERROR)printf(sock bind error code!);return(-1);return(1);DWORD WriteFile(char *fname,char *fdata,int flen)int i;FILE *fp;fp=fopen(fname,w);if(fp=NULL)printf(cannot open this filen);i=0;for(i=0;iflen;i+)fputc(fdatai,fp);fclose(fp);return(1);DWORD ConnectProcess()Addrlen=sizeof(sockaddr_in);if(listen(sock,5)0)printf(Listen error);return(-1);printf(Listening.n);for(;)sock1=accept(sock,(struct sockaddr FAR*)&ClientAddr,&Addrlen);for(;)memset(DataPacket.ffname,0,30);memset(DataPacket.ffdata,0,MAX_FILESIZE);DataPacket.len=0;if(recv(sock1,(char*)&DataPacket,sizeof(DataPacket),0)MAX_FILESIZE)printf(your file is too bign);fclose(fp);return(0);memcpy(&Senddatai,buffer,count);i+=count;fclose(fp);Senddatai=0;strcpy(DataPacket.ffname,fname);menmcpy(DataPacket.ffdata,Senddata,Filesize);DataPacket.len=Filesize;printf(%s %dn,DataPacket.ffname,DataPacket.len);return(1);DWORD TCPSendPacket(struct Filedata Packet)int length;length=send(sock,(char*)&Packet,sizeof(DataPacket),0);if(lenght=0)printf(send Filedata errorn);closesocket(sock);WSACleanup();return(-1);return(1);int main()char sendfilename30;StartSock();CallServer();printf(connect ok!n);while(1)printf(Input your filename to send:n);scanf(%s,sendfilename);if(strcmp(sendfilename,exit)=0)break;if(GetFile(sendfilename)=0)continue;TCPSendPacket(DataPacket);closesocket(sock);return 0;4.4.2TCP实现客户机/服务器聊天BOOL CCSocketDlg:OnInitDialog()CDialog:OnInitDialog();.count=0;m_list.InsertColumn(0,消息);m_list.SetColumnWidth(0,435);m_edit.SetLimitText(99);for(int i=0;iGetMainWnd();msgcount=dlg-getcount();if(msgcount=-1)loop=0;if(loop)s=1;dlg-msgsockmsgcount=accept(dlg-sock,(sockaddr*)&(dlg-serv),&(dlg-addlen);if(dlg-msgsockmsgcount=INVALID_SOCKET)dlg-m_edit.SetWindowText(Error accept);elseAfxBeginThread(thread,0);dlg-SetForegroundWindow();dlg-m_list.InsertItem(dlg-count+,连接成功);dlg-m_list.InsertItem(dlg-count+,inet_ntoa(dlg-serv.sin_addr);dlg-m_list.Scroll(size);dlg-m_button.EnableWindow(TRUE);while(s!=SOCKET_ERROR)s=recv(dlg-msgsockmsgcount,buff,100,0);dlg-SetForegroundWindow();if(s!=SOCKET_ERROR)dlg-m_list.Scroll(size);dlg-sendtoall(,buff);send(dlgmsgsockmsgcount,Disconnected,100,0);dlg-m_list.InsertItem(dlg-count+,Disconnected);dlg-m_list.Scroll(size);dlg-msgsockmsgcount=NULL;for(int i=0;imsgsocki!=NULL)flag=1;if(flag!=1)dlg-m_button.EnableWindow(FALSE);closesocket(dlg-msgsockmsgcount;AfxEndThread(0);return 0;int CCSocketDlg:getcount()for(int i=0;i50;i+)if(msgsocki=NULL)return i;return -1;void CCSocketDlg:sendtoall(SOCKET s,char*buff)for(int i=0;i50;i+)if(msgsocki!=NULL&msgsocki!=s)send(msgsocki,buff,100,0);/void CCSocketDlg:OnButton1()char buff100;m_edit.GetWindowText(buff,99);m_edit.SetWindowText();m_listInserItem(count+,buff);CSize size;size.cx=0;size.cy=30;m_list.Scroll(size);for(int i=0;iGetMainWnd();dlg-m_connect.EnableWindow(FALSE);dlg-m_disconnect.EnableWindow(TRUE);while(connect(dlg-clisock,(sockaddr*&(dlg-cli),sizeof(dlg-cli)&dlg-ee!=0)dlg-m_edit.SetWindowText(等待.);for(int i=0;i=65000;i+)for(int j=0;jcli.sin_addr.s_addr=inet_addr(arrayaddcount+);if(dlg-ee=1)dlg-m_list.InsertItem(dlg-count+,连接成功);dlg-m_button1.EnableWindow(TRUE);dlg-SetForegroundWindow();while(s!=SOCKET_ERROR&dlg-ee!=0)s=recv(dlg-clisock,buff,100,0);dlg-SetForegroundWindow();if(s!=SOCKET_ERROR&dlg-ee!=0)dlg-m_list.InsertItem(dlg-count+,buff);dlg-m_list.Scroll(size);send(dlg-clisock,Disconnected,100,0);dlg-m_button1.EnableWindow(FALSE);dlg-m_connect.EnableWindow(TRUE);dlg-m_disconnect.EnableWindow(FALSE);closesocket(dlg-clisock);AfxEndThread(0);return 0;/void CCSocketcliDlg:OnButton1()char buff100;CSize size;size.cx=0;size.cy=30;m_edit.GetWindowText(buff,99);m_edit.SetWindowText();m_list.InsetItem(count+,buff);m_list.Scroll(size);send(clisock,buff,100,0);/2、客户端/连接按钮的代码void CCSocketcliDlg:OnButton2()char ipaddress35;m_edit2.GetWindowText(ipaddress,30);cli.sin_addr.s_addr=inet_addr(ipaddress);cli.sin_family=AF_INET;cli.sin_port=5000;/htons(5000);clisock=socket(AF_INET,SOCK_STREAM,0);ee=1;AfxBeginThread(thread,0);UINT thread(LPVOID v) char buff100; char array2530=127.0.0.1,(等);CSize size;size.cx=0;size.cy=30;int s=1,addcount=0;CCSocketcliDlg *dlg=(CCSocketcliDlg*)AfxGetApp()-GetMainWnd();dlg-m_connect.EnableWindow(FALSE);dlg-m_disconnect.EnableWindow(TRUE); while(connect(dlg-clisock,(sockaddr*)&()dlg-cli),sizeof(dlg-cli)&dlg-ee!=0)dlg-m_edit.SetWindowText(等待.);for(int i=0;i65000;i+) for(int j=0;jcli.sin_addr.s_addr=inet_addr(arrayaddcount+);if(dlg-ee=1)dlg-m_list.InsertItem(dlg-count+,连接成功);dlg-m_button1.EnableWindow(TRUE);dlg-SetForegroundWindow();while(s!=SOCKET_ERROR & dlg-ee!=0)s=recv(dlg-clisock,buff,100,0);dlg-SetForegroundWindow();if(s!=SOCKET_ERROR & dlg-ee!=0)dlg-m_list.InsertItem(dlg-count+,buff);dlg-m_list.Scroll(size);send(dlg-clisock,Disconnected,100,0);dlg-m_button1.EnableWindow(FALSE);dlg-m_conect.EnableWindow(FALSE);closesocket(dlg-clisock);AfxEndThread(0);return 0;void CCSocketcliDlg:OnButton1()char buff100;CSize size;size.cx=0;size.cy=30;m_edit.GetWindowText(buff,99);m_edit.SetWindowText();m_list.InsertItem(count+,buff);m_list.Scroll(size);send(clisock,buff,100,0);111-119CComm:CComm()ListenSocket=INVALID_SOCKET; /开始设置为INVALID_SOCKET#ifdef _WIN32 /如果是Win32系统WORD VersionRequested=MAKEWORD(1,1);WSADATA wsadata;WSAStartup(VersionRequested,&wsadata); if(wsadata.wVersion!=VersionRequested) /提示版本错误信息printf(Wrong version or WinSock not loadedn);fflush(0);#endif CComm:CComm()if(ListenSocket!=INVALID_SOCKET)closesocket(ListenSocket); /如果已创建则关闭#ifdef _WIN32WSACleanup();#endif bool CComm:Listen(int PortNum)/创建socketListenSocket=socket( PF_INET,SOCK_DGRAM, 0);if(ListenSocket=INVALID_SOCKET)printf(error:socket创建失败n);fflush(0)return false;/设定地址srv.sin_family = PF_INET;srv.sin_addr.s_addr = htonl(INADDR_ANY);/确定绑定端口srv.sin_port=htons(PortNum);if(bind(ListenSocket,(struct sockaddr*)&srv,sizeof(srv)!=0)printf(error:绑定失败n); fflush(0);closesocket(ListenSocket);return false;int ThreadID; /线程IDDWORD thread;/调用CreateThread创建线程ThreadID=(int)CreateThread( NULL,0, (LPTHREAD_START_ROUTINE)(CComm:ListenThread),(void*)this,0,&thread );ThreadID=ThreadID?0:1; /如果成功,则返回0if(ThreadID) /如果不为0,则线程创建失败printf(线程创建失败);return false; elsereturn true; void CComm:ListenThread(void *data)char buf4096;CComm *Comm=(CComm*)data;int len=sizeof(Comm-client); /获得地址长度while(1) /获得数据,一直循环/接收数据int result=recvfrom( Comm-ListenSocket,buf, sizeof(buf)-1,0,(sockaddr*)&Comm-client,(socklen_t*)&len); if(result0) /如果获得数据bufresult=0;/获得发送端的地址和端口printf(Message received from host %s port %in,inet_ntoa(Comm-client.sin_addr),ntohs(Comm- client.sin_port);printf(%s,buf); /输出接收到的数据fflush(0); bool CComm:SendMsg(char *Msg, int Len, char *host, short port)signed int Sent;hostent *hostdata;if(atoi(host) /IP地址是否标准u_long ip=inet_addr(host);hostdata=gethostbyaddr(char*)&ip,sizeof(ip),PF_INET);else /否则可能是计算机名hostdata=gethostbyname(host);if(!hostdata)printf(获得主机名错误n);fflush(0);return false;sockaddr_in dest; /设定目标地址dest/发送目标地址dest.sin_family=PF_INET;dest.sin_addr=*(in_addr*)(hostdata-h_addr_list0);dest.sin_port=htons(port);printf(信息已被发送到主机%s 端口为%in,inet_ntoa(dest.sin_addr),ntohs(dest.sin_port);/调用sendto发送数据Sent=sendto(ListenSocket,Msg,Len,0,(sockaddr*)&dest,sizeof( sockaddr_in);if(Sent!=Len) printf(错误发送UDP信息n);fflush(0);return false;return true;int main(int argc,char *argv )char buffer4096; /缓冲区short listeningport; /要绑定的绑定接收端口short destport; /要发送的对方端口char *desthost; /目标端口printf(Initialization.n);listeningport=2000; /设定UDP绑定端口destport=3000; /设定发送端口desthost=127.0.0.1; /设定目标地址CComm myComm;if(!myComm.Listen(listeningport) /绑定地址printf(端口%d绑定失败n,listeningport);return 0;printf(聊天程序成功建立:退出nn);while(fgets(buffer,sizeof(buffer),stdin) /获得输入数据 /发送数据到目标地址myComm.SendMsg(buffer,strlen(buffer),desthost,destport);return 0; /定义ICMP头typedef struct icmp_hdrunsigned char icmp_type;unsigned char icmp_code;unsigned short icmp_checksum;unsigned short icmp_id;unsigned short icmp_sequence;unsigned long icmp_timestamp; ICMP_HDR, *PICMP_HDR, FAR *LPICMP_HDR; ICMP_HDR *icmp = NULL;SOCKET s;SOCKADDR_STORAGE dest;char bufsizeof(ICMP_HDR) + 32;icmp = (ICMP_HDR *)buf;icmp-icmp_type = 8; /定义echo请求类型icmp-icmp_code = 0;icmp-icmp_id = GetCurrentProcessId();icmp-icmp_checksum = 0; /将校验和域清零icmp-icmp_sequence = 0;icmp-icmp_timestamp = GetTickCount();memset(&bufsizeof(ICMP_HDR), , 32); /随机填充负载端/计算ICMP头和负载的校验和,checksum()函数的实现参见下文Ping程序icmp-icmp_checksum = checksum(buf, sizeof(ICMP_HDR)+32);s = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); /初始化目标SOCKADDR_STORAGE(SOCKADDR_IN *)&dest)-sin_family = AF_INET;(SOCKADDR_IN *)&dest)-sin_port = htons(0);(SOCKADDR_IN *)&dest)-sin_addr.s_addr =inet_addr(1.2.3.4);sendto(s, buf, sizeof(ICMP_HDR)+32, 0, (SOCKADDR *)&dest, sizeof(dest); /120-127/iphdr.h的详细代码为:/Sample:Protocol header definitions used by ping(raw sockets)/Files:/iphdr.h -this file/Description:/ This file various protocol header definitions used by/ the raw socket ping sample./ Compile:/ See ping.cpp/ Usage:/ See ping.cpp/Align on a 1-byte boundary#includetypedef struct ip_hdrunsigned char ip_verlen;unsigned char ip_tos;unsigned short ip_totallength;unsigned short ip_id;unsigned short ip_offset;unsigned char ip_ttl;unsigned char ip_protocol;unsigned short ip_check_sum;unsigned int ip_srcaddr;unsigned int ip_destaddr;IPV4_HDR,*PIPV4_HDR,FAR*LPIPV4_HDR;/IPV4 opyion headertypedef struct ipv4_option_hdrunsigned char opt_code;unsigned char opt_len;unsigned char opt_ptr;unsigned long opt_addr9;IPV4_OPTION_HDR,*PIPV4_OPTION_HDR,FAR*LPIPV4_OPTION_HDR;/ICMP headertype struct icmp_hdrunsigned char mp_type;unsigned char mp_code;unsigned short mp_checksum;unsigned short mp_id;unsigned short mp_sequence;unsigned short icmp_timestamp;ICMP_HDR,*PICMP_HDR,FAR*LPICMP_HDR;/IPV6 protocol headertypedef struct ipv6_hdrunsigned long ipv6_vertcflow;unsigned short ipv6_nexthdr;unsigned char ipv6_hoplimit;struct in6_addr ipv6_srcaddr;struct in6_addr ipv6_destaddr;IPV6_HDR,*PIPV6_HDR,FAR*LPIPV6_HDR; /IPV6 fragment headertypedef struct ipv6_fragment_hdrunsigned char ipv6_frag_nexthdr;unsigned char ipv6_frag_reserved;unsigned char ipv6_frag_offset;unsigned char ipv6_frag_id;IPV6_FRAGMENT_HDR,*PIPV6_FRAGMENT_HDR,FAR*LPIPV6_FRAGMENT_HDR;/ICMPv6 headertypedef struct icmpv6_hdrunsigned char icmp6_type;unsigned char icmp6_code;unsigned short icmp6_checksum;ICMPV6_HDR;/ICMPv6 echo request bodytypedef struct icmp6_echo_requestunsigned short icmp6_echo_id;unsigned short icmp6_echo_sequence;ICMPV6_ECHO_REQUEST;/Define the UDP headertypedef struct udp_hdrunsigned short src_portno;unsigned short dst_portno;unsigned short udp_length;unsigned short udp_checksum;UDP_HDR,*PUDR_HDR;/IPV4 opyion for record route# define IP_REC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 考点解析-华东师大版7年级下册期末试题附答案详解(基础题)
- 2025年生态修复工程生态系统服务功能评估与生态修复工程环境监测技术挑战报告
- 有用的企业面试题库【基础题】附答案详解
- 解析卷-北京市西城区育才学校7年级数学下册变量之间的关系专项练习试题(含解析)
- 2025年工业互联网平台计算机视觉在电子元件制造缺陷检测的应用前景报告
- 解析卷青岛版8年级数学下册期末试题及参考答案详解(B卷)
- 2025年度夜间经济特色摊位租赁协议范本下载
- 2025版大型超市蔬菜批发供应合同
- 2025版私人合伙旅游度假合作协议书范本
- 2025版房地产项目投资担保合同
- 2024年高级消防员技能鉴定考前必刷必练题库500题(含真题、必会题)
- 非法宗教班会课件
- 《智能客服运营管理》课件
- 管网工程施工组织设计与管理
- 幼儿园开学园长会议发言稿模版
- 2025年大学辅导员选拔考试题库:学生综合素质评价体系评价方法试题
- 酒店前台接待流程及话术
- 2025第三届全国技能大赛竞赛(装配钳工赛项)省选拔赛考试题库(含答案)
- GB/Z 27001-2025合格评定通用要素原则与要求
- 2025年第九届“学宪法、讲宪法”活动知识竞赛测试题库及答案
- 银行规范服务礼仪培训
评论
0/150
提交评论