⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 用vc6制作互通消息.txt

📁 用vc制作互通消息的文档说明
💻 TXT
📖 第 1 页 / 共 2 页
字号:
                            }
                    }

                    ---- 8.为发送消息项添加一个对话框的类,名为send,有一个文
                    本框,用来发送消息.并为文本框添加CString m_Message 变量,
                    并在ServerView.cpp中添加#include "send.h" 

                    ---- 

                    ---- 9.为发送消息项添加一个判断函数: 

                    void CServerView::OnUpdateSendmessage(CCmdUI* pCmdUI) 
                    {// TODO: Add your command update UI handler code here
                            pCmdUI-  >Enable(FALSE);
                            if(Isconnect)
                                    pCmdUI- >Enable(TRUE);
                    }
                            10.再窗口显示消息:
                                    void CServerView::OnDraw(CDC* pDC)
                    {       if(flag)
                            {       sizeTotal.cy+=20;
                    for(int j=65;j< m_data[count-1].GetLength();j++)
                                            sizeTotal.cx+=15;
                                    OnInitialUpdate();
                                    flag=FALSE;
                            }
                            CServerDoc* pDoc = GetDocument();
                            ASSERT_VALID(pDoc);
                            int y=10;
                            for(int i=0;i< count;i++)
                            {       pDC- >TextOut(10,y,m_data[i]);
                                    y+=20;
                            }
                            // TODO: add draw code for native data here
                    }
                            11.在Project中点击Settings中选择Link项添加wsock32.lib.
                            最后编译程序,就可以得到Server.exe程序.



                        现在介绍客户机程序:


                            1.创建一个名为"client"的项目,单文档界面.
                            2.在clientview.h中加入代码:
                                    #include "winsock.h"
                            添加变量:
                                    CString m_data[1000];
                                    HANDLE  m_hListenThread;
                                    SOCKET  m_sock;
                                    SOCKADDR_IN m_saSrvr;
                                    BOOL    Isconnect;
                                    int     count;
                                    CSize   sizeTotal;
                                    BOOL    flag;
                            3.在构造函数中初始化变量:
                            CClientView::CClientView()
                    {       // TODO: add construction code here
                            Isconnect=FALSE;
                            sizeTotal.cy=350;
                            sizeTotal.cx=300;
                            flag=FALSE;
                    }
                            4.在析构函数中完成清除操作,代码如上:
                            5.在菜单中添加"拨号"项:
                                    void CClientView::OnDial() 
                    {// TODO: Add your command handler code here
                            count=5;
                            if(m_bInitialized)
                            {       AfxMessageBox("Already dialing");
                                    return;
                            }
                            Cdial dial;
                            if(dial.DoModal()==IDOK&&!dial.
                    m_HostAddress.IsEmpty())
                            {m_saSrvr.sin_family=AF_INET;
                             m_saSrvr.sin_addr.S_un.S_addr
                    =htonl(INADDR_ANY);
                             m_saSrvr.sin_addr.S_un.S_addr
                    =inet_addr(dial.m_HostAddress);
                             m_saSrvr.sin_port=htons(5050);
                             int status;
                             WSADATA wsaData;
                     m_data[0]="initializing Windows Sockets DLL....";
                             if((status=WSAStartup(0x0101,&wsaData))==0)
                            {       m_data[0]+="Succeeded";
                                    m_bInitialized=TRUE;
                            }
                            else
                            {       m_bInitialized=FALSE;
                            }
                            m_sock=socket(AF_INET,SOCK_DGRAM,0);
                            m_data[1]="Creating socket....";
                            if(m_sock==INVALID_SOCKET)
                            {       m_data[1]+="Failed";
                            }
                            m_data[1]+="Succeeded";
                            m_data[2]="Binding socket....";
                            sockaddr_in sa;
                            sa.sin_family=AF_INET;
                            sa.sin_addr.S_un.S_addr=
                    htonl(INADDR_ANY);
                            sa.sin_port=htons(0);
                            if(bind(m_sock,(PSOCKADDR)&sa,
                    sizeof(sa))==SOCKET_ERROR)
                            {       m_data[2]+="Failed";
                                    closesocket(m_sock);
                            }
                            m_data[2]+="Succeeded";
                    m_data[3]="Creating listener thread....";
                            unsigned long idThread;
                            m_hListenThread=CreateThread(NULL,0,
                    (LPTHREAD_START_ROUTINE)Listen,
                    (void *)this,0,&idThread);
                            if(m_hListenThread)
                            {       m_data[3]+="Succeeded";
                                    m_data[4]+="Waiting....";
                            }
                            else
                                    m_data[4]+="Failed";
                            InvalidateRect(NULL);
                            }
                    }

                    ---- 6.添加一个拨号对话框,名为dial,有一个文本框用来写IP
                    地址.并在clientview.cpp中添加代码: 

                            #include dial.h

                            7.在拨号项添加一个判断函数:
                    void CClientView::OnUpdateDial(CCmdUI* pCmdUI) 
                    {// TODO: Add your command update UI handler code here
                            pCmdUI- >Enable(TRUE);
                            if(Isconnect)
                                    pCmdUI- >Enable(FALSE);
                    }

                             8.添加接收与发送消息的线程:
                                    long WINAPI Listen(CClientView *pView)
                    {       char msg[2000];
                            pView- >m_data[5]="Sending ATTACH command";
                            pView- >InvalidateRect(NULL);
                            wsprintf(msg,"A: ");
                            sendto(pView- >m_sock,msg,1024,0,
                    (PSOCKADDR)&pView- >m_saSrvr,sizeof(pView- >m_saSrvr));
                            int saSrvrLen ,nchar;
                            while(1)
                            {       saSrvrLen=sizeof(pView- >m_saSrvr);
                                    nchar=recvfrom(pView- >m_sock,msg,
                    1024,0,(PSOCKADDR)&pView- >m_saSrvr,&saSrvrLen);
                                    if(nchar< 0)
                    {       pView- >m_data[pView- >count++]
                    ="Error in recvform";
                            pView- >InvalidateRect(NULL);
                                    }
                                    else
                    {       pView- >m_data[pView- >count++]=msg;
                            pView- >Isconnect=TRUE;
                            pView- >flag=TRUE;
                            pView- >InvalidateRect(NULL);
                                    }
                            }
                            return(0);
                    }

                    ---- 9.同主程序一样做一个发送消息项,代码如上. 

                    ---- 10.显示程序也与主程序一样,代码如上. 

                    ---- 11.在Project中点击Settings中选择Link项添加
                    wsock32.lib. 

                    ---- 12.编译程序便可得到client.exe程序. 

                    ---- server.exe 和 client.exe 做完后,就可以在具有TCP/IP
                    协议下的网络中执行. 

                    ---- 通过上面的例子,你可以很快了解vc++网络编程的优点,你
                    还可以添加其它功能项,在这我就不多加叙述了.希望我的程序能
                    起到抛砖引玉的目的,让我们都能编出好的网络程序. 
                                                                                                                                                                        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -