计算机网络课程设计实验报告6601855330.doc_第1页
计算机网络课程设计实验报告6601855330.doc_第2页
计算机网络课程设计实验报告6601855330.doc_第3页
计算机网络课程设计实验报告6601855330.doc_第4页
计算机网络课程设计实验报告6601855330.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

肅芅蒁螈羀芄薃羄艿莃蚆螆膅莃螈羂肁莂薈螅肇莁蚀肀羃莀螂袃节荿蒂肈膈莈薄袁肄莇蚆肇羀蒇蝿袀芈蒆蒈蚂膄蒅蚁袈膀蒄螃螁肆蒃蒃羆羂蒂薅蝿芁蒁蚇羄膇薁螀螇肃薀葿羃罿蕿薂螆芇薈螄羁芃薇袆袄腿薆薆聿肅膃蚈袂羁膂螀肈芀膁蒀袀膆芀薂肆肂艿蚅衿羈艿袇蚂莇芈薇羇芃芇虿螀腿芆螁羅肅芅蒁螈羀芄薃羄艿莃蚆螆膅莃螈羂肁莂薈螅肇莁蚀肀羃莀螂袃节荿蒂肈膈莈薄袁肄莇蚆肇羀蒇蝿袀芈蒆蒈蚂膄蒅蚁袈膀蒄螃螁肆蒃蒃羆羂蒂薅蝿芁蒁蚇羄膇薁螀螇肃薀葿羃罿蕿薂螆芇薈螄羁芃薇袆袄腿薆薆聿肅膃蚈袂羁膂螀肈芀膁蒀袀膆芀薂肆肂艿蚅衿羈艿袇蚂莇芈薇羇芃芇虿螀腿芆螁羅肅芅蒁螈羀芄薃羄艿莃肈腿薈螅膁莅薄螄羀膇蒀螄肂蒃莆螃膅芆蚄螂袄蒁薀螁羇芄蒆袀聿葿莂衿膁节蚁袈袁肅蚇袈肃芁薃袇膆膃葿袆袅荿莅袅羈膂蚃袄肀莇蕿羃膂膀蒅羂袂莅莁羂羄膈螀羁膆蒄蚆羀艿芇薂罿羈蒂蒈薅肁芅莄薅膃蒀蚃蚄袃芃蕿蚃羅葿蒅蚂肇芁蒁蚁芀肄蝿蚀罿莀蚅蚀肂膃薁虿膄莈蒇蚈袄膁莃螇羆莆蚂螆肈腿薈螅膁莅薄螄羀膇蒀螄肂蒃莆螃膅芆蚄螂袄蒁薀螁羇芄蒆袀聿葿莂衿膁节蚁袈袁肅蚇袈肃芁薃袇膆膃葿袆袅荿莅袅羈膂蚃袄肀莇蕿羃膂膀蒅羂袂莅莁羂羄膈螀羁膆蒄蚆羀艿芇薂罿羈蒂蒈薅肁芅莄薅膃蒀蚃蚄袃芃蕿蚃羅葿蒅蚂肇芁蒁蚁芀肄蝿蚀罿莀蚅蚀肂膃薁虿膄莈蒇蚈袄膁莃螇羆莆蚂螆肈腿薈螅膁莅薄螄羀膇蒀螄肂蒃莆螃膅芆蚄螂袄蒁薀螁羇芄蒆袀聿葿莂衿膁节蚁袈袁肅蚇袈肃芁薃袇膆膃葿袆袅荿莅袅羈膂蚃袄肀莇蕿羃膂膀蒅羂袂莅莁羂羄膈螀羁膆蒄蚆羀艿芇薂罿羈蒂蒈薅肁芅莄薅膃蒀蚃蚄袃芃蕿蚃羅葿蒅蚂肇芁蒁蚁芀肄蝿蚀罿莀蚅蚀肂膃薁虿膄莈蒇蚈袄膁莃螇羆莆蚂螆肈腿薈螅膁莅薄螄羀膇蒀螄肂蒃莆螃膅芆蚄螂袄蒁薀螁羇芄蒆袀聿葿莂衿膁节蚁袈袁肅蚇袈肃芁薃袇膆膃葿袆袅荿莅袅羈膂蚃袄肀莇蕿羃膂膀蒅羂袂莅莁羂羄膈螀羁膆蒄蚆羀艿芇薂罿羈蒂蒈薅肁芅莄薅膃蒀蚃蚄袃芃蕿蚃羅葿蒅蚂肇芁蒁蚁芀肄蝿蚀罿莀蚅蚀肂膃薁虿膄莈蒇蚈袄膁莃螇羆莆蚂螆肈腿薈螅膁莅薄螄羀膇蒀螄肂蒃莆螃膅芆蚄螂袄蒁薀螁羇芄蒆袀聿葿莂衿膁节蚁袈袁肅蚇袈肃芁薃袇膆膃葿袆袅荿莅袅羈膂蚃袄肀莇蕿羃膂膀蒅羂袂莅莁羂羄膈螀羁膆蒄蚆羀艿芇薂罿羈蒂蒈薅肁芅莄薅膃蒀蚃蚄袃芃蕿蚃羅葿蒅蚂肇芁蒁蚁芀肄蝿蚀罿莀蚅蚀肂膃薁虿膄莈蒇蚈袄膁莃螇羆莆蚂螆肈腿薈螅膁莅薄螄羀膇蒀螄肂蒃莆螃膅芆蚄螂袄蒁薀螁羇芄蒆袀聿葿莂衿膁节蚁袈袁肅蚇袈肃芁薃袇膆膃葿袆袅荿莅袅羈膂蚃袄肀莇蕿羃膂膀蒅羂袂莅莁羂羄膈螀羁膆蒄蚆羀艿芇薂罿羈蒂蒈薅肁芅莄薅膃蒀蚃蚄袃芃蕿蚃羅葿蒅蚂肇芁蒁蚁芀肄蝿蚀罿莀蚅蚀肂膃薁虿膄莈蒇蚈袄膁莃螇羆莆蚂螆肈腿薈螅膁莅薄螄羀膇蒀螄肂蒃莆螃膅芆蚄螂袄蒁薀螁羇芄蒆袀聿葿莂衿膁节蚁袈袁肅蚇袈肃芁薃袇膆膃葿袆袅荿莅袅羈膂蚃袄肀莇蕿羃膂膀蒅羂袂莅莁羂羄膈螀羁膆蒄蚆羀艿芇薂罿羈蒂蒈薅肁芅莄薅膃蒀蚃蚄袃芃蕿蚃羅葿蒅蚂肇芁蒁蚁芀肄蝿蚀罿莀蚅蚀肂膃薁虿膄莈蒇蚈袄膁莃螇羆莆蚂螆肈腿薈螅膁莅薄螄羀膇蒀螄肂蒃莆螃膅芆蚄螂袄蒁薀螁羇芄蒆袀聿葿莂衿膁节蚁袈袁肅蚇袈肃芁薃袇膆膃葿袆袅荿莅袅羈膂蚃袄肀莇蕿羃膂膀蒅羂袂莅莁羂羄膈螀羁膆蒄蚆羀艿芇薂罿羈蒂蒈薅肁芅莄薅膃蒀蚃蚄袃芃蕿蚃羅葿蒅蚂肇芁蒁蚁芀肄蝿蚀罿莀蚅蚀肂膃薁虿膄莈蒇蚈袄膁莃螇羆莆蚂螆肈腿薈螅膁莅薄螄羀膇蒀螄肂蒃莆螃膅芆蚄螂袄蒁薀螁羇芄蒆袀聿葿莂衿膁节蚁袈袁肅蚇袈肃芁薃袇膆膃葿袆袅荿莅袅羈膂蚃袄肀莇蕿羃膂膀蒅羂袂莅莁羂羄膈螀羁膆蒄蚆羀艿芇薂罿羈蒂蒈薅肁芅莄薅膃蒀蚃蚄袃芃蕿蚃羅葿蒅蚂肇芁蒁蚁芀肄蝿蚀罿莀蚅蚀肂膃薁虿膄莈蒇蚈袄膁莃螇羆莆蚂螆肈腿薈螅膁莅薄螄羀膇蒀螄肂蒃莆螃膅芆蚄螂袄蒁薀螁羇芄蒆袀聿葿莂衿膁节蚁袈袁肅蚇袈肃芁薃袇膆膃葿袆袅荿莅袅羈膂蚃袄肀莇蕿羃膂膀蒅羂袂莅莁羂羄膈螀羁膆蒄蚆羀艿芇薂罿羈蒂蒈薅肁芅莄薅膃蒀蚃蚄袃芃蕿蚃羅葿蒅蚂肇芁蒁蚁芀肄蝿蚀罿莀蚅蚀肂膃薁虿膄莈蒇蚈袄膁莃螇羆莆蚂螆肈腿薈螅膁莅薄螄羀膇蒀螄肂蒃莆螃膅芆蚄螂袄蒁薀螁羇芄蒆袀聿葿莂衿膁节蚁袈袁肅蚇袈肃芁薃袇膆膃葿袆袅荿莅袅羈膂蚃袄肀莇蕿羃膂膀蒅羂袂莅莁羂羄膈螀羁膆蒄蚆羀艿芇薂罿羈蒂蒈薅肁芅莄薅膃蒀蚃蚄袃芃蕿蚃羅葿蒅蚂肇芁蒁蚁芀肄蝿蚀罿莀蚅蚀肂膃薁虿膄莈蒇蚈袄膁莃螇羆莆蚂螆肈腿薈螅膁莅薄螄羀膇蒀螄肂蒃莆螃膅芆蚄螂袄蒁薀螁羇芄蒆袀聿葿莂衿膁节蚁袈袁肅蚇袈肃芁薃袇膆膃葿袆袅荿莅袅羈膂蚃袄肀莇蕿羃膂膀蒅羂袂莅莁羂羄膈螀羁膆蒄蚆羀艿芇薂罿羈蒂蒈薅肁芅莄薅膃蒀蚃蚄袃芃蕿蚃羅葿蒅蚂肇芁蒁蚁芀肄蝿蚀罿莀蚅蚀肂膃薁虿膄莈蒇蚈袄膁莃螇羆莆蚂螆肈腿薈螅膁莅薄螄羀膇蒀螄肂蒃莆螃膅芆蚄螂袄蒁薀螁羇芄蒆袀聿葿莂衿膁节蚁袈袁肅蚇袈肃芁薃袇膆膃葿袆袅荿莅袅羈膂蚃袄肀莇蕿羃膂膀蒅羂袂莅莁羂羄膈螀羁膆蒄蚆羀艿芇薂罿羈蒂蒈薅肁芅莄薅膃蒀蚃蚄袃芃蕿蚃羅葿蒅蚂肇芁蒁蚁芀肄蝿蚀罿莀蚅蚀肂膃薁虿膄莈蒇蚈袄膁莃螇羆莆蚂螆肈腿薈螅膁莅薄螄羀膇蒀螄肂蒃莆螃膅芆蚄螂袄蒁薀螁羇芄蒆袀聿葿莂衿膁节蚁袈袁肅蚇袈肃芁薃袇膆膃葿袆袅荿莅袅羈膂蚃袄肀莇蕿羃膂膀蒅羂袂莅莁羂羄膈螀羁膆蒄蚆羀艿芇薂罿 计算机网络课程设计报告题目:网络聊天程序的实现姓名:刘书禄学号:0705010314班级:计算机三班指导老师:文宏测试时间:2010.9.9测试地点:信息楼六楼湖南科技大学计算机科学与工程学院2010年9月1、 课程设计题目网络聊天程序的设计与实现2、 课程设计目的1、 加深对计算机网络通信系统工作原理的理解通过编写计算机程序实现、模拟网络的某些功能,使自己理解并掌握计算机网络基本工作原理及过程。2、 提高网络编程和应用的能力提高实际编程能力和灵活运用所学知识解决问题的能力。培养调查研究、查阅技术文献、资料、手册及编写技术文档的能力,理论运用于实践的能力。3、 课程设计要求1、 仔细分析每一个实验的具体内容、步骤和要求,按设计要求完成任务。 2、 程序设计需要完成的程序流程图、说明文档和源程序清单。3、 提交课程设报告(包含课程设计名称、课程设计题目、课程设计内容、课程设计步骤、调试过程、课程设计结果以及结果分析、心得体会)、程序源文件、可执行文件。4、 程序原理在计算机通信系统中,有两种通信方式:面向连接的tcp和面向报文的udp。tcp:传输控制协议。tcp提供可靠交付的服务。也就是说,通过tcp连接传送的数据,无差错,不丢失,不重复、并且按序到达。所以服务器和客户端的通讯使用tcp来完成。确保服务器作为“中转站”能够得到、存储、转发正确的客户信息。udp:用户数据报协议。udp用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用udp协议。因为客户端之间的通讯(聊天)对数据正确性的要求不是太高,偶尔出错也不会有太大的影响。本课程设计采用tcp与udp两种方式来实现网络聊天程序。5、 课程设计步骤1、 tcp网络聊天程序tcp传输控制提供可靠的,有保证的通信质量,是面向连接的通信。因此,在通信之前,通信双方就得采用建立连接。tcp通信采取c/s(客户机/服务器)模式。需要分别编写客户端程序和服务器端程序。1) 服务器端程序编写步骤:a) 加载套接字库,创建套接字(wsastartup()/socket();b) 绑定套接字到一个ip地址和一个端口上(bind();c) 将套接字设置为监听模式等待连接请求(listen();d) 请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept();e) 用返回的套接字和客户端进行通信(send()/recv();f) 返回,等待另一连接请求;g) 关闭套接字,关闭加载的套接字库(closesocket()/wsacleanup()。2) 客户端程序编写步骤:a) 加载套接字库,创建套接字(wsastartup()/socket();b) 向服务器发出连接请求(connect();c) 和服务器端进行通信(send()/recv();d) 关闭套接字,关闭加载的套接字库(closesocket()/wsacleanup()。2、 udp网络聊天程序与tcp不同,udp在通信时并不要双方建立连接,它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用udp较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的icq和oicq就是使用的udp协议。因此,本设计同样采用udp连接方式。程序编写步骤:a) 加载套接字库,创建套接字(wsastartup()/socket();b) 绑定套接字到一个ip地址和一个端口上(bind();c) 发送和接收数据(sendto()/recvfrom();d) 关闭套接字,关闭加载的套接字库(closesocket()/wsacleanup()。6、 程序流程图tcpudp7、 程序源代码tcp服务器tcpserverdlg.h:class cmysimpleqq_serverdlg : public cdialog/ constructionpublic:cmysimpleqq_serverdlg(cwnd* pparent = null);/ standard constructor/ dialog data/afx_data(cmysimpleqq_serverdlg)enum idd = idd_mysimpleqq_server_dialog ;cbuttonm_buttsend;ceditm_edit2;ceditm_edit1;cstringm_stredit1;/afx_data/ classwizard generated virtual function overrides/afx_virtual(cmysimpleqq_serverdlg)protected:virtual void dodataexchange(cdataexchange* pdx);/ ddx/ddv support/afx_virtual/ implementationprotected:hicon m_hicon;/ generated message map functions/afx_msg(cmysimpleqq_serverdlg)virtual bool oninitdialog();afx_msg void onsyscommand(uint nid, lparam lparam);afx_msg void onpaint();afx_msg hcursor onquerydragicon();afx_msg lresult onupdatedata(wparam wparam, lparam lparam);afx_msg void onsend();/afx_msgdeclare_message_map()public:/服务器套接字和ip地址socket sockserver;sockaddr_in addrserver;/客服端套接字和ip地址socket sockclient;sockaddr_in addrclient;int addrclientlen;tcpserverdlg.cpp:#include stdafx.h#include mysimpleqq_server.h#include mysimpleqq_serverdlg.h#ifdef _debug#define new debug_new#undef this_filestatic char this_file = _file_;#endif/class caboutdlg : public cdialogpublic:caboutdlg();/ dialog data/afx_data(caboutdlg)enum idd = idd_aboutbox ;/afx_data/ classwizard generated virtual function overrides/afx_virtual(caboutdlg)protected:virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv support/afx_virtual/ implementationprotected:/afx_msg(caboutdlg)/afx_msgdeclare_message_map();caboutdlg:caboutdlg() : cdialog(caboutdlg:idd)/afx_data_init(caboutdlg)/afx_data_initvoid caboutdlg:dodataexchange(cdataexchange* pdx)cdialog:dodataexchange(pdx);/afx_data_map(caboutdlg)/afx_data_mapbegin_message_map(caboutdlg, cdialog)/afx_msg_map(caboutdlg)/ no message handlers/afx_msg_mapend_message_map()/ cmysimpleqq_serverdlg dialogcmysimpleqq_serverdlg:cmysimpleqq_serverdlg(cwnd* pparent /*=null*/): cdialog(cmysimpleqq_serverdlg:idd, pparent)/afx_data_init(cmysimpleqq_serverdlg)m_stredit1 = _t();/afx_data_init/ note that loadicon does not require a subsequent destroyicon in win32m_hicon = afxgetapp()-loadicon(idr_mainframe);void cmysimpleqq_serverdlg:dodataexchange(cdataexchange* pdx)cdialog:dodataexchange(pdx);/afx_data_map(cmysimpleqq_serverdlg)ddx_control(pdx, idc_send, m_buttsend);ddx_control(pdx, idc_edit2, m_edit2);ddx_control(pdx, idc_edit1, m_edit1);ddx_text(pdx, idc_edit1, m_stredit1);/afx_data_mapbegin_message_map(cmysimpleqq_serverdlg, cdialog)/afx_msg_map(cmysimpleqq_serverdlg)on_wm_syscommand()on_wm_paint()on_wm_querydragicon()on_message(wm_updatedata, onupdatedata)on_bn_clicked(idc_send, onsend)/afx_msg_mapend_message_map()/ cmysimpleqq_serverdlg message handlersuint thread(lpvoid p)/临时变量int s=1;cstring temp;char buffer100=;cmysimpleqq_serverdlg *dlg=(cmysimpleqq_serverdlg*)afxgetapp()-getmainwnd();/接收客户端连接dlg-sockclient=accept(dlg-sockserver,(sockaddr*)&dlg-addrclient,&dlg-addrclientlen);/接收客服端数据if(dlg-sockclient=invalid_socket)dlg-m_stredit1 +=客服端接收失败!rn;else/afxbeginthread(&thread,0);dlg-m_buttsend.enablewindow(true);/发送按钮有效/提示连接成功temp.format(【系统提示】:%s连接成功!rn,inet_ntoa(dlg-addrclient.sin_addr);dlg-m_stredit1 +=temp;dlg-postmessage(wm_updatedata,0,0);dlg-setforegroundwindow();/接收客户端消息while(s!=socket_error)s=recv(dlg-sockclient,buffer,100,0);dlg-setforegroundwindow();if(s!=socket_error)temp.format(%s:rnt,inet_ntoa(dlg-addrclient.sin_addr);dlg-m_stredit1 += temp;dlg-m_stredit1 = dlg-m_stredit1 + buffer + rn;dlg-postmessage(wm_updatedata,0,0);/如果发生错误,发送中断消息给客户端send(dlg-sockclient,【系统提示】:连接已中断!,100,0);dlg-m_stredit1 += 【系统提示】:连接已中断!rn;dlg-postmessage(wm_updatedata,0,0);/如果客户端连接中断,关闭套接字dlg-m_buttsend.enablewindow(false);closesocket(dlg-sockclient);afxendthread(0);return 0;bool cmysimpleqq_serverdlg:oninitdialog()cdialog:oninitdialog();/ add about. menu item to system menu./ idm_aboutbox must be in the system command range.assert(idm_aboutbox & 0xfff0) = idm_aboutbox);assert(idm_aboutbox appendmenu(mf_separator);psysmenu-appendmenu(mf_string, idm_aboutbox, straboutmenu);/ set the icon for this dialog. the framework does this automatically/ when the applications main window is not a dialogseticon(m_hicon, true);/ set big iconseticon(m_hicon, false);/ set small icon/ todo: add extra initialization herem_buttsend.enablewindow(false);wsadata wsadata;if(wsastartup(0x101,&wsadata)!=0)m_stredit1 =【系统提示】:初始化失败!rn;addrserver.sin_addr.s_addr=htonl(inaddr_any);addrserver.sin_family=af_inet;addrserver.sin_port=2204;sockserver=socket(af_inet,sock_stream,0);if(sockserver=invalid_socket)m_stredit1 +=【系统提示】:套接字创建失败!rn;elseif(bind(sockserver,(sockaddr*)&addrserver,sizeof(addrserver)!=0)m_stredit1 +=【系统提示】:套接字绑定失败!rn;elsem_stredit1 +=【系统提示】:服务器创建成功!rn【系统提示】:等待连接 . .rn;listen(sockserver,5);afxbeginthread(&thread,0);addrclientlen=sizeof(addrclient);updatedata(false);return true; / return true unless you set the focus to a controlvoid cmysimpleqq_serverdlg:onsyscommand(uint nid, lparam lparam)if (nid & 0xfff0) = idm_aboutbox)caboutdlg dlgabout;dlgabout.domodal();elsecdialog:onsyscommand(nid, lparam);void cmysimpleqq_serverdlg:onpaint() if (isiconic()cpaintdc dc(this); / device context for paintingsendmessage(wm_iconerasebkgnd, (wparam) dc.getsafehdc(), 0);/ center icon in client rectangleint cxicon = getsystemmetrics(sm_cxicon);int cyicon = getsystemmetrics(sm_cyicon);crect rect;getclientrect(&rect);int x = (rect.width() - cxicon + 1) / 2;int y = (rect.height() - cyicon + 1) / 2;/ draw the icondc.drawicon(x, y, m_hicon);elsecdialog:onpaint();/ the system calls this to obtain the cursor to display while the user drags/ the minimized window.hcursor cmysimpleqq_serverdlg:onquerydragicon()return (hcursor) m_hicon;lresult cmysimpleqq_serverdlg:onupdatedata(wparam wparam, lparam lparam) updatedata(false); return 0;void cmysimpleqq_serverdlg:onsend() / todo: add your control notification handler code herechar buffer100=;cstring temp;m_edit2.getwindowtext(buffer,100);send(sockclient,buffer,100,0);temp.format(%s:rnt,inet_ntoa(addrserver.sin_addr);m_stredit1 = m_stredit1 + temp + buffer + rn;m_edit2.setwindowtext();updatedata(false);tcpclient.h:class cmysimpleqq_clientdlg : public cdialog/ constructionpublic:cmysimpleqq_clientdlg(cwnd* pparent = null);/ standard constructor/ dialog data/afx_data(cmysimpleqq_clientdlg)enum idd = idd_mysimpleqq_client_dialog ;cbuttonm_buttdisconnect;cbuttonm_buttconnect;cbuttonm_buttsend;cipaddressctrlm_ipaddress;ceditm_edit2;cstringm_stredit1;/afx_data/ classwizard generated virtual function overrides/afx_virtual(cmysimpleqq_clientdlg)protected:virtual void dodataexchange(cdataexchange* pdx);/ ddx/ddv support/afx_virtual/ implementationprotected:hicon m_hicon;/ generated message map functions/afx_msg(cmysimpleqq_clientdlg)virtual bool oninitdialog();afx_msg void onsyscommand(uint nid, lparam lparam);afx_msg void onpaint();afx_msg hcursor onquerydragicon();afx_msg void onbuttonconnect();afx_msg lresult onupdatedata();afx_msg void onbuttonsend();afx_msg void onbuttondisconnect();/afx_msgdeclare_message_map()public:socket sockclient;sockaddr_in addrclient;int addrlen;udp.h:#ifndef _udp_h_#define _udp_h_#include #include #include #include #pragma comment(lib,ws2_32)class udpprivate:static void *listenthread(void *data);socket listensocket;sockaddr_in srv;sockaddr_in client;public:udp();udp();bool sendmsg(char *msg, int len, char *host, short port);bool listen(int portnum);udp:udp()listensocket=invalid_socket;word version=makeword(2,2);wsadata wsadata;if(wsastartup(version,&wsadata)printf(socket服务启动失败!);fflush(0);udp:udp()if(listensocket!=invalid_socket)closesocket(listensocket);wsacleanup();bool udp:listen(int portnum)listensocket=socket(pf_inet,sock_dgram,0);if(listensocket=invalid_socket)printf(socket创建失败!);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(socket绑定失败!);fflush(0);closesocket(listensocket);return false;int threadid;dword thread;threadid=(int)createthread(null,0,(lpthread_start_routine)(udp:listenthread),(void *)this,0,&thread);threadid=threadid?0:1;if(threadid)printf(线程创建失败!);return false;elsereturn true;void *udp:listenthread(void *data)char buf4096;udp *udp=(udp *)data;int len=sizeof(udp-client);while(1)int result=recvfrom(udp-listensocket,buf,sizeof(buf)-1,0,(sockaddr *)&udp-client,(int *)&len);if(result0)bufresult=0;printf(client.sin_addr),ntohs(udp-client.sin_port);printf(%sn,buf);fflush(0);bool udp:sendmsg(char *msg,int len, char *host,short port)signed int sent;hostent *hostdata;if(atoi(host)u_long ip=inet_addr(host);hostdata=gethostbyaddr(char *)&ip,sizeof(ip),pf_inet);elsehostdata=gethostbyname(host);if(!hostdata)printf(获得计算机名错误!n);fflush(0);return false;sockaddr_in dest;dest.sin_family=pf_inet;dest.sin_addr=*(in_addr *)(hostdata-h_addr_list0);dest.sin_port=htons(port);printf(%s(%i):n,inet_ntoa(dest.sin_addr),ntohs(dest.sin_port);sent=sendto(listensocket,msg,len,0,(sockaddr *)&dest,sizeof(sockaddr_in);if(sent!=len)printf(发送错误!);fflush(0);return false;return false;#endifudp.cpp:#include udp.hint main(int argc,char *argv)char buffer4096;short listeningport;short destport;char *desthost;printf(初始化中。n);listeningport=200;destport=100;desthost=127.0.0.1;udp udp;if(!udp.listen(listeningport)printf(端口%s绑定失败!n,listeningport);return 0;printf(聊天程序建立成功!退出nn);while(fgets(buffer,sizeof(buffer),stdin)udp.sendmsg(buffer,strlen(buffer),desthost,destport);return 0;8、 附录(软件截图)设定服务器客户机 膀蚃虿袇节蒆蚅袆蒄螂羄袅膄薄袀袄芆螀螆袃荿薃蚂袂蒁莅羀羂膁薁袆羁芃莄螂羀莅蕿螈罿膅莂蚄羈芇蚈羃羇荿蒀衿羆蒂蚆螅羆膁葿蚁肅芄蚄薇肄莆蒇袆肃肆蚂袂肂芈蒅螈肁莀螁蚄肁蒃薃羂肀膂莆袈聿芅薂螄膈莇莅蚀膇肇薀薆膆腿莃羅膅莁蚈袁膅蒃蒁螇膄膃蚇蚃膃芅葿羁膂莈蚅袇芁蒀蒈螃芀膀蚃虿袇节蒆蚅袆蒄螂羄袅膄薄袀袄芆螀螆袃荿薃蚂袂蒁莅羀羂膁薁袆羁芃莄螂羀莅蕿螈罿膅莂蚄羈芇蚈羃羇荿蒀衿羆蒂蚆螅羆膁葿蚁肅芄蚄薇肄莆蒇袆肃肆蚂袂肂芈蒅螈肁莀螁蚄肁蒃薃羂肀膂莆袈聿芅薂螄膈莇莅蚀膇肇薀薆膆腿莃羅膅莁蚈袁膅蒃蒁螇膄膃蚇蚃膃芅葿羁膂莈蚅袇芁蒀蒈螃芀膀蚃虿袇节蒆蚅袆蒄螂羄袅膄薄袀袄芆螀螆袃荿薃蚂袂蒁莅羀羂膁薁袆羁芃莄螂羀莅蕿螈罿膅莂蚄羈芇蚈羃羇荿蒀衿羆蒂蚆螅羆膁葿蚁肅芄蚄薇肄莆蒇袆肃肆蚂袂肂芈蒅螈肁螃膃肆蒃袅羆莅蒂薅蝿芁薁蚇羄膇薁螀螇肃薀葿羃罿蕿蚁螆莇薈螄肁芃薇袆袄腿薆薆聿肅薅蚈袂莄蚅螀肈芀蚄袃袀膆蚃薂肆肂艿螅衿肈艿袇膄莇芈薇羇芃芇虿膂腿芆螁羅肄芅袄螈莃莄薃羄艿莃蚆螆膅莃袈羂膁莂薇袅肇莁蚀肀莆莀螂袃节荿袄肈膈莈薄袁肄蒇蚆肇羀蒇蝿袀芈蒆薈肅芄蒅蚁羈膀蒄螃膃肆蒃袅羆莅蒂薅蝿芁薁蚇羄膇薁螀螇肃薀葿羃罿蕿蚁螆莇薈螄肁芃薇袆袄腿薆薆聿肅薅蚈袂

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论