VC++网络程序设计实例

合集下载

网络程序设计课程设计--VC(MFC)实现简单的聊天室程序

网络程序设计课程设计--VC(MFC)实现简单的聊天室程序

《网络程序设计》课程设计报告书题目:简单的聊天室程序专业:网络工程完成日期:一、题目:简单的聊天室程序要求:本题是一个简单的聊天室程序,采用客户/服务器模式,分为客户端程序和服务器端程序。

由于服务器只能支持一个客户,实际上是一个点对点通信的程序。

客户端程序和服务器程序通过网络交换聊天字符串内容,并在窗口的列表框中显示。

二、系统概要设计聊天室是分客户端和服务端两个应用程序的,两个应用程序要想实现交互必须编写相应的指令和识别指令的代码,我写的这是个指令依次是启动停止用户退出的命令,但用户想要进行以上动作中的任何一个时,在用户按下按键的时候,客户端都是向服务端发送相应的指令,再由服务端实际的执行。

三、系统详细设计对概要设计中提到的功能函数进行详细设计。

服务器端:// ChatRoomServerDlg.cpp : implementation file//#include "stdafx.h"#include "ChatRoomServer.h"#include "ChatRoomServerDlg.h"#include "ListenSocket.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public: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_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)//{{AFX_MSG_MAP(CAboutDlg)// No message handlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CChatRoomServerDlg dialogCChatRoomServerDlg::CChatRoomServerDlg(CWnd* pParent /*=NULL*/) : CDialog(CChatRoomServerDlg::IDD, pParent){//{{AFX_DATA_INIT(CChatRoomServerDlg)// NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CChatRoomServerDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CChatRoomServerDlg)DDX_Control(pDX, IDC_BUTTON_STOP, m_IDC_BUTTON_STOP);DDX_Control(pDX, IDC_BUTTON_START, m_IDC_BUTTON_START);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CChatRoomServerDlg, CDialog)//{{AFX_MSG_MAP(CChatRoomServerDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON_START, OnButtonStart)ON_BN_CLICKED(IDC_BUTTON_STOP, OnButtonStop)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CChatRoomServerDlg message handlersBOOL CChatRoomServerDlg::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 < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization herem_IDC_BUTTON_STOP.EnableWindow(FALSE);return TRUE; // return TRUE unless you set the focus to a control}void CChatRoomServerDlg::OnSysCommand(UINT nID, LPARAM lParam)if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below// to draw the icon. For MFC applications using the document/view model,// this is automatically done for you by the framework.void CChatRoomServerDlg::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);}else{CDialog::OnPaint();}}// The system calls this to obtain the cursor to display while the user drags// the minimized window.HCURSOR CChatRoomServerDlg::OnQueryDragIcon()return (HCURSOR) m_hIcon;}void CChatRoomServerDlg::OnButtonStart(){// TODO: Add your control notification handler code herem_IDC_BUTTON_START.EnableWindow(FALSE);//使启动按钮无效ListenSocket.Create(6767);//创建监听套接字端口为6767ListenSocket.Listen();//开始监听m_IDC_BUTTON_STOP.EnableWindow(TRUE);//将停止按钮激活}void CChatRoomServerDlg::OnButtonStop(){// TODO: Add your control notification handler code herem_IDC_BUTTON_STOP.EnableWindow(FALSE);//使停止按钮无效ListenSocket.Close();//关闭监听套接字m_IDC_BUTTON_START.EnableWindow(TRUE);//将启动按钮激活}// ChatRoomServer.h : main header file for the CHATROOMSERVER application//#if !defined(AFX_CHA TROOMSERVER_H__680EC642_E19B_4D55_88DF_2C9E9B1B30FD __INCLUDED_)#defineAFX_CHATROOMSERVER_H__680EC642_E19B_4D55_88DF_2C9E9B1B30FD__INCLUDE D_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#ifndef __AFXWIN_H__#error include 'stdafx.h' before including this file for PCH#endif#include "resource.h" // main symbols/////////////////////////////////////////////////////////////////////////////// CChatRoomServerApp:// See ChatRoomServer.cpp for the implementation of this class//class CChatRoomServerApp : public CWinApp{public:CChatRoomServerApp();// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CChatRoomServerApp)public:virtual BOOL InitInstance();//}}AFX_VIRTUAL// Implementation//{{AFX_MSG(CChatRoomServerApp)// NOTE - the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code !//}}AFX_MSGDECLARE_MESSAGE_MAP()};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCA TION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif// !defined(AFX_CHATROOMSERVER_H__680EC642_E19B_4D55_88DF_2C9E9B1B30FD__ INCLUDED_)// ChatRoomServerDlg.h : header file//#if !defined(AFX_CHA TROOMSERVERDLG_H__5BE648B6_8A9C_4E90_BF1D_20FE943A5 25F__INCLUDED_)#defineAFX_CHATROOMSERVERDLG_H__5BE648B6_8A9C_4E90_BF1D_20FE943A525F__INCL UDED_#include "ClientSocketList.h" // Added by ClassView#include "ListenSocket.h" // Added by ClassView#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000/////////////////////////////////////////////////////////////////////////////// CChatRoomServerDlg dialogclass CChatRoomServerDlg : public CDialog{// Constructionpublic:CListenSocket ListenSocket;CChatRoomServerDlg(CWnd* pParent = NULL); // standard constructor// Dialog Data//{{AFX_DATA(CChatRoomServerDlg)enum { IDD = IDD_CHATROOMSERVER_DIALOG };CButton m_IDC_BUTTON_STOP;CButton m_IDC_BUTTON_START;//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CChatRoomServerDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support//}}AFX_VIRTUAL// Implementationprotected:HICON m_hIcon;// Generated message map functions//{{AFX_MSG(CChatRoomServerDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnButtonStart();afx_msg void OnButtonStop();//}}AFX_MSGDECLARE_MESSAGE_MAP()};//{{AFX_INSERT_LOCA TION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif// !defined(AFX_CHA TROOMSERVERDLG_H__5BE648B6_8A9C_4E90_BF1D_20FE943A52 5F__INCLUDED_)#if !defined(AFX_CLIENTSOCKET_H__5B707F31_3AD5_4F47_B58E_ECFC99EB60F0__IN CLUDED_)#defineAFX_CLIENTSOCKET_H__5B707F31_3AD5_4F47_B58E_ECFC99EB60F0__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000// ClientSocket.h : header file///////////////////////////////////////////////////////////////////////////////// CClientSocket command targetclass CClientSocketList;class CClientSocket : public CSocket{// Attributespublic:// Operationspublic:CClientSocket(CClientSocketList *);virtual ~CClientSocket();// Overridespublic:CClientSocketList *List;CClientSocket * Front;CClientSocket * Next;// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CClientSocket)public:virtual void OnReceive(int nErrorCode);virtual void OnClose(int nErrorCode);//}}AFX_VIRTUAL// Generated message map functions//{{AFX_MSG(CClientSocket)// NOTE - the ClassWizard will add and remove member functions here.//}}AFX_MSG// Implementationprotected:};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCA TION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif// !defined(AFX_CLIENTSOCKET_H__5B707F31_3AD5_4F47_B58E_ECFC99EB60F0__INC LUDED_)// ClientSocketList.h: interface for the CClientSocketList class.////////////////////////////////////////////////////////////////////////#if !defined(AFX_CLIENTSOCKETLIST_H__E746355D_FA10_4D12_B544_2FF152C16414__ INCLUDED_)#defineAFX_CLIENTSOCKETLIST_H__E746355D_FA10_4D12_B544_2FF152C16414__INCLUDE D_#include "ClientSocket.h"#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000class CClientSocketList{public:BOOL Sends(CClientSocket *);BOOL Add(CClientSocket *);CClientSocket * Head;CClientSocketList();virtual ~CClientSocketList();};#endif// !defined(AFX_CLIENTSOCKETLIST_H__E746355D_FA10_4D12_B544_2FF152C16414__I NCLUDED_)#if !defined(AFX_LISTENSOCKET_H__5D655304_370E_4680_A556_E417552D24EC__INC LUDED_)#defineAFX_LISTENSOCKET_H__5D655304_370E_4680_A556_E417552D24EC__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000// ListenSocket.h : header file//#include "ClientSocketList.h"/////////////////////////////////////////////////////////////////////////////// CListenSocket command targetclass CListenSocket : public CSocket{// Attributespublic:// Operationspublic:CClientSocketList CCSL;//客户socket列表CListenSocket();virtual ~CListenSocket();// Overridespublic:// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CListenSocket)public:virtual void OnAccept(int nErrorCode); //重载OnAccept函数//}}AFX_VIRTUAL// Generated message map functions//{{AFX_MSG(CListenSocket)// NOTE - the ClassWizard will add and remove member functions here.//}}AFX_MSG// Implementationprotected:};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCA TION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif// !defined(AFX_LISTENSOCKET_H__5D655304_370E_4680_A556_E417552D24EC__INCL UDED_)// ChatRoomServer.cpp : Defines the class behaviors for the application.//#include "stdafx.h"#include "ChatRoomServer.h"#include "ChatRoomServerDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CChatRoomServerAppBEGIN_MESSAGE_MAP(CChatRoomServerApp, CWinApp)//{{AFX_MSG_MAP(CChatRoomServerApp)// NOTE - the ClassWizard will add and remove mapping macros here.// DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSGON_COMMAND(ID_HELP, CWinApp::OnHelp)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CChatRoomServerApp constructionCChatRoomServerApp::CChatRoomServerApp(){// TODO: add construction code here,// Place all significant initialization in InitInstance}/////////////////////////////////////////////////////////////////////////////// The one and only CChatRoomServerApp objectCChatRoomServerApp theApp;/////////////////////////////////////////////////////////////////////////////// CChatRoomServerApp initializationBOOL CChatRoomServerApp::InitInstance(){if (!AfxSocketInit()){AfxMessageBox(IDP_SOCKETS_INIT_FAILED);return FALSE;}AfxEnableControlContainer();// Standard initialization// If you are not using these features and wish to reduce the size// of your final executable, you should remove from the following// the specific initialization routines you do not need.#ifdef _AFXDLLEnable3dControls(); // Call this when using MFC in a shared DLL #elseEnable3dControlsStatic(); // Call this when linking to MFC statically#endifCChatRoomServerDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse == IDOK){// TODO: Place code here to handle when the dialog is// dismissed with OK}else if (nResponse == IDCANCEL){// TODO: Place code here to handle when the dialog is// dismissed with Cancel}// Since the dialog has been closed, return FALSE so that we exit the// application, rather than start the application's message pump.return FALSE;}II 客户端:客户端:// ChatRoomClient.cpp : Defines the class behaviors for the application.//#include "stdafx.h"#include "ChatRoomClient.h"#include "ChatRoomClientDlg.h"#include "ConnectedDlg.h"#include "ClientSocket.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifCClientSocket curSocket;/////////////////////////////////////////////////////////////////////////////// CChatRoomClientAppBEGIN_MESSAGE_MAP(CChatRoomClientApp, CWinApp)//{{AFX_MSG_MAP(CChatRoomClientApp)// NOTE - the ClassWizard will add and remove mapping macros here.// DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSGON_COMMAND(ID_HELP, CWinApp::OnHelp)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CChatRoomClientApp constructionCChatRoomClientApp::CChatRoomClientApp(){// TODO: add construction code here,// Place all significant initialization in InitInstance}/////////////////////////////////////////////////////////////////////////////// The one and only CChatRoomClientApp objectCChatRoomClientApp theApp;/////////////////////////////////////////////////////////////////////////////// CChatRoomClientApp initializationBOOL CChatRoomClientApp::InitInstance(){if (!AfxSocketInit()){AfxMessageBox(IDP_SOCKETS_INIT_FAILED);return FALSE;}AfxEnableControlContainer();// Standard initialization// If you are not using these features and wish to reduce the size// of your final executable, you should remove from the following// the specific initialization routines you do not need.#ifdef _AFXDLLEnable3dControls(); // Call this when using MFC in a shared DLL #elseEnable3dControlsStatic(); // Call this when linking to MFC statically#endifCConnectedDlg cdlg(&curSocket);if (cdlg.DoModal()==IDCANCEL) return FALSE;CChatRoomClientDlg dlg(&curSocket);m_pMainWnd = &dlg;curSocket.SetDlg(&dlg);int nResponse = dlg.DoModal();if (nResponse == IDOK){// TODO: Place code here to handle when the dialog is// dismissed with OK}else if (nResponse == IDCANCEL){// TODO: Place code here to handle when the dialog is// dismissed with Cancel}// Since the dialog has been closed, return FALSE so that we exit the// application, rather than start the application's message pump.return FALSE;}// ChatRoomClientDlg.cpp : implementation file//#include "stdafx.h"#include "ChatRoomClient.h"#include "ChatRoomClientDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public: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_INIT}void 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()/////////////////////////////////////////////////////////////////////////////// CChatRoomClientDlg dialogCChatRoomClientDlg::CChatRoomClientDlg(CClientSocket *tmp,CWnd* pParent /*=NULL*/) : CDialog(CChatRoomClientDlg::IDD, pParent){//{{AFX_DATA_INIT(CChatRoomClientDlg)m_IDC_EDIT_MESSAGE = _T("");//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);myServerSocket=tmp;}void CChatRoomClientDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CChatRoomClientDlg)DDX_Control(pDX, IDC_STATIC_NIKENAME, m_STATIC_NIKENAME_CONTROL);DDX_Control(pDX, IDC_LIST_CHA TBOX, m_IDC_LIST_CHATBOX_CONTROL);DDX_Text(pDX, IDC_EDIT_MESSAGE, m_IDC_EDIT_MESSAGE);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CChatRoomClientDlg, CDialog)//{{AFX_MSG_MAP(CChatRoomClientDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON_SEND, OnButtonSend)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CChatRoomClientDlg message handlersBOOL CChatRoomClientDlg::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 < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small iconm_STATIC_NIKENAME_CONTROL.SetWindowText(myServerSocket->NikeName);// TODO: Add extra initialization herereturn TRUE; // return TRUE unless you set the focus to a control}void CChatRoomClientDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below// to draw the icon. For MFC applications using the document/view model,// this is automatically done for you by the framework.void CChatRoomClientDlg::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);}else{CDialog::OnPaint();}}// The system calls this to obtain the cursor to display while the user drags// the minimized window.HCURSOR CChatRoomClientDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}BOOL CChatRoomClientDlg::GetMessage(){char buff[1000];int count;count=myServerSocket->Receive(buff,1000);buff[count]=0;m_IDC_LIST_CHA TBOX_CONTROL.AddString(buff);return true;void CChatRoomClientDlg::OnButtonSend(){// TODO: Add your control notification handler code hereint n;char message[1000];UpdateData(TRUE);m_IDC_EDIT_MESSAGE=myServerSocket->NikeName+": "+m_IDC_EDIT_MESSAGE;n=m_IDC_EDIT_MESSAGE.GetLength();//message=new char(n+1);sprintf(message,"%s",m_IDC_EDIT_MESSAGE.GetBuffer(n));message[n]=0;if (myServerSocket->Send(message,n+1)){m_IDC_EDIT_MESSAGE="";UpdateData(FALSE);}else{AfxMessageBox("网络传输错误!!!");}}// ClientSocket.cpp : implementation file//#include "stdafx.h"#include "ChatRoomClient.h"#include "ClientSocket.h"#include "ChatRoomClientDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CClientSocketCClientSocket::CClientSocket()NikeName="";myDlg=0;}CClientSocket::~CClientSocket(){}BOOL CClientSocket::SetDlg(CChatRoomClientDlg *tmp){myDlg=tmp;return true;}// Do not edit the following lines, which are needed by ClassWizard.#if 0BEGIN_MESSAGE_MAP(CClientSocket, CSocket)//{{AFX_MSG_MAP(CClientSocket)//}}AFX_MSG_MAPEND_MESSAGE_MAP()#endif // 0/////////////////////////////////////////////////////////////////////////////// CClientSocket member functionsvoid CClientSocket::OnReceive(int nErrorCode){// TODO: Add your specialized code here and/or call the base class myDlg->GetMessage();CSocket::OnReceive(nErrorCode);}// ConnectedDlg1.cpp : implementation file//#include "stdafx.h"#include "ChatRoomClient.h"#include "ConnectedDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CConnectedDlg dialogCConnectedDlg::CConnectedDlg(CClientSocket * tmp,CWnd* pParent /*=NULL*/) : CDialog(CConnectedDlg::IDD, pParent){//{{AFX_DATA_INIT(CConnectedDlg)m_IDC_EDIT_ADDRESS = _T("");m_IDC_EDIT_NIKENAME = _T("");//}}AFX_DATA_INITmyServerSocket=tmp;}void CConnectedDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CConnectedDlg)DDX_Text(pDX, IDC_EDIT_ADDRESS, m_IDC_EDIT_ADDRESS);DDX_Text(pDX, IDC_EDIT_NIKENAME, m_IDC_EDIT_NIKENAME);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CConnectedDlg, CDialog)//{{AFX_MSG_MAP(CConnectedDlg)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CConnectedDlg message handlersvoid CConnectedDlg::OnOK(){// TODO: Add extra validation hereUpdateData(TRUE);char *nikename,*address;int n;if (!myServerSocket->Create()){myServerSocket->Close();AfxMessageBox("网络创建错误!!");return;}n=m_IDC_EDIT_ADDRESS.GetLength();address=new char(n+1);sprintf(address,"%s",m_IDC_EDIT_ADDRESS.GetBuffer(n));address[n]=0;n=m_IDC_EDIT_NIKENAME.GetLength();nikename=new char(n+1);sprintf(nikename,"%s",m_IDC_EDIT_NIKENAME.GetBuffer(n));nikename[n]=0;if (!myServerSocket->Connect(address,6767)){myServerSocket->Close();AfxMessageBox("网络连接错误!请重新检查服务器地址的填写是否正确?");return;}myServerSocket->NikeName=nikename;CDialog::OnOK();}// stdafx.cpp : source file that includes just the standard includes// ChatRoomClient.pch will be the pre-compiled header// stdafx.obj will contain the pre-compiled type information#include "stdafx.h"// ChatRoomClient.h : main header file for the CHATROOMCLIENT application//#if !defined(AFX_CHATROOMCLIENT_H__4503F0DD_CA95_4F24_B6EE_3183B64B095B_ _INCLUDED_)#defineAFX_CHATROOMCLIENT_H__4503F0DD_CA95_4F24_B6EE_3183B64B095B__INCLUDE D_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#ifndef __AFXWIN_H__#error include 'stdafx.h' before including this file for PCH#endif#include "resource.h" // main symbols/////////////////////////////////////////////////////////////////////////////// CChatRoomClientApp:// See ChatRoomClient.cpp for the implementation of this class//class CChatRoomClientApp : public CWinApp{public:CChatRoomClientApp();// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CChatRoomClientApp)public:virtual BOOL InitInstance();//}}AFX_VIRTUAL// Implementation//{{AFX_MSG(CChatRoomClientApp)// NOTE - the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code !//}}AFX_MSGDECLARE_MESSAGE_MAP()};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCA TION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif// !defined(AFX_CHATROOMCLIENT_H__4503F0DD_CA95_4F24_B6EE_3183B64B095B__I NCLUDED_)// ChatRoomClientDlg.h : header file//#if !defined(AFX_CHATROOMCLIENTDLG_H__4DF07865_B696_4641_82F8_4B32BF39595 9__INCLUDED_)#defineAFX_CHATROOMCLIENTDLG_H__4DF07865_B696_4641_82F8_4B32BF395959__INCLU DED_#include "ClientSocket.h" // Added by ClassView#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000//class ClientSocket;/////////////////////////////////////////////////////////////////////////////// CChatRoomClientDlg dialogclass CChatRoomClientDlg : public CDialog{// Constructionpublic:CClientSocket * myServerSocket;BOOL GetMessage();CChatRoomClientDlg(CClientSocket *,CWnd* pParent = NULL); // standard constructor// Dialog Data//{{AFX_DATA(CChatRoomClientDlg)enum { IDD = IDD_CHATROOMCLIENT_DIALOG };CStatic m_STATIC_NIKENAME_CONTROL;CListBox m_IDC_LIST_CHA TBOX_CONTROL;CString m_IDC_EDIT_MESSAGE;//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CChatRoomClientDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support//}}AFX_VIRTUAL// Implementationprotected:HICON m_hIcon;// Generated message map functions//{{AFX_MSG(CChatRoomClientDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnButtonSend();//}}AFX_MSGDECLARE_MESSAGE_MAP()};//{{AFX_INSERT_LOCA TION}}。

C语言网络编程基础及其应用实例

C语言网络编程基础及其应用实例

C语言网络编程基础及其应用实例网络编程是计算机科学中的一个重要领域,它涉及到计算机之间的通信和数据传输。

而C语言作为一种高效且广泛使用的编程语言,也被广泛应用于网络编程领域。

本文将介绍C语言网络编程的基础知识,并通过实例来展示其应用。

一、网络编程基础在进行网络编程之前,我们首先需要了解一些基础概念。

网络编程主要涉及两个重要的概念:IP地址和端口号。

IP地址是用来唯一标识网络中的主机的地址。

它由四个十进制数组成,每个数的取值范围是0到255。

例如,192.168.0.1是一个常见的IP地址。

端口号用于标识网络中的应用程序。

一个主机可以同时运行多个应用程序,每个应用程序都会监听一个特定的端口号。

端口号的取值范围是0到65535,其中0到1023是系统保留端口号,一般用于一些常见的服务,如HTTP服务的端口号是80。

在C语言中,我们可以使用socket库进行网络编程。

socket库提供了一组函数,用于创建网络连接、发送和接收数据等操作。

下面我们通过一个简单的实例来演示如何使用C语言进行网络编程。

二、应用实例:简单的服务器和客户端我们将创建一个简单的服务器和客户端程序,通过服务器向客户端发送一条消息。

首先,我们需要创建服务器程序。

以下是服务器程序的代码:```c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#define PORT 8080int main() {int server_fd, new_socket, valread;struct sockaddr_in address;int addrlen = sizeof(address);char *message = "Hello from server";// 创建socketif ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {perror("socket failed");exit(EXIT_FAILURE);}address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY;address.sin_port = htons(PORT);// 绑定地址和端口号if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) { perror("bind failed");exit(EXIT_FAILURE);}// 监听连接请求if (listen(server_fd, 3) < 0) {perror("listen failed");exit(EXIT_FAILURE);}// 接受客户端连接if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {perror("accept failed");exit(EXIT_FAILURE);}// 发送消息给客户端send(new_socket, message, strlen(message), 0);printf("Message sent to client\n");return 0;}```接下来,我们创建客户端程序。

VisualC网络编程案例实战之串口通信编程应用.pptx

VisualC网络编程案例实战之串口通信编程应用.pptx
• 注意:串口控件类的成员函数说明请参考上面的 该类定义代码。
2.使用CMSComm类
• 在上面的小节中,向用户介绍了CMSComm类的头 文件。用户在该类的头文件中,可以看到主要的成 员函数声明等。在本小节中,将在程序中,使用该 类进行相关的串口操作,并向用户介绍这些操作的 方法。
• (1)用户要使用CMSComm类,必须在程序中包含 该类的头文件。
第14章 串口通信编程应用
• 如今,越来越多的用户将计算机串口应用到实际生 产和生活中。利用串口进行数据通信,不但可以实 现远距离数据传输,还可以轻松实现数据的检错与 纠错。读者在VC中,实现串口通信编程可以使用 MFC中的串口控件或者Windows API函数。在本章 中,将向用户分别介绍这两种实现方法。本章假定 读者在同一台计算机上虚拟了两个串口C置串口参数
• 首先,用户需要使用串口类对象调用函数SetCommPort() 设置将打开的串口号。该函数原型如下:
• void SetCommPort(short nNewValue);//设置串口号码
• 该函数的作用是指定或设置将打开的串口号码。参数 nNewValue表示设置的串口号。例如,用户在程序中, 将使用串口“COM1”进行串口通信,则设置串口号的 代码如下:
• CString str="9600,n,8,1"; 初始化参数字符串
• comm.SetSettings(str); 设置串口参数
//定义并 //
• 在上面的程序中,用户将波特率设置为9600(默认值),n表示无 校验位,数据位为8,停止位为1。其中,设置奇偶校验位的取值 如表14.2所示。
表14.1 串口接收数据类型的取值
取值 0 1
含义 表示接收数据的类型是文本类型 表示接收的数据类型为二进制类型

计算机毕业设计_VC++网络五子棋对战系统

计算机毕业设计_VC++网络五子棋对战系统

┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊摘要五子棋游戏以其优秀的人工智能深受广大玩家的喜爱,而对于初步探究网络编成的编程爱好者来说,编制五子棋程序因其规则简单而大受欢迎,然而它却要求程序员对五子棋规则有相当深入的了解。

程序员考虑得越周到,其五子棋程序就越智能。

五子棋游戏软件设计的主要内容是:根据五子棋的基本规则,要让对方客户端知道该在哪一点下子,就要根据盘面的形势,并把棋盘棋子的重新绘制绘制,也就是更新该点的位置,然后再通过监听网络传递的消息,直到新的位置放在棋盘的什么位置上,在进行修改,并通过计算,得出玩家是否获得胜利.,因此玩家就能反复的进行联机游戏。

本文论述了采用联机对战的方式体现出五子棋程序的分析与设计,并采用面向对象的开发工具VC++来具体实现。

关键词:五子棋;VC++;面向对象┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊AbstractWuziqi game with excellent artificial intelligence by the vast number of players who, for the initial research network organization programming enthusiasts, Wuziqi procedures for the preparation of the rules simple and popular, but it requires programmer to Wuziqi game has a deep understanding of the rules. Other thoughtful consideration they treat their Wuziqi game procedures more wisdom.Wuziqi game software design is the main content: According Wuziqi basic rules to know each other's customers - in violation of the West, we must under Permian situation, and the board pawn re-mapping mapping, that is updating the point position, and then through the monitoring network news until the new location on the board what position, Following changes, and through the calculation, resulting in players is victory. , the on-line game players can repeatedly.This article discusses the use of on-line way reflect those Wuziqi procedures analysis and design, object-oriented development tools and the adoption of specific VC++ to achieve.Key Words : Wuziqi, VC++,object-oriented┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊目录1. 引言 (4)1.1课题背景 (4)1.1.1背景知识 (4)1.1.2五子棋游戏的规则 (4)2. 系统目标 (12)3. 系统需求分析 (13)3.1系统需求 (13)3.2功能需求 (13)3.3系统运行环境 (13)3.4MFC简述 (13)3.5服务器与客户端SOCKET设计 (13)4. 系统设计 (15)4.1概要设计 (15)4.2流程图 (15)4.3详细设计 (17)4.3.1钩子的使用 (17)4.4程序设计 (18)4.4.1 程序窗口的设计 (18)5. 结论 (26)5.1关键技术 (26)5.2总结 (26)设计总结 (27)致谢 (28)参考文献 (29)附录 (30)┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊1.引言1.1课题背景1.1.1背景知识五子棋是起源于中国古代的传统黑白棋种之一。

用vc写一款网络电视程序

用vc写一款网络电视程序

现在流媒体技术日益成熟完善,出现不少网络电视软件,但大部分都是收费的,为此我们也可以利用activemovie控件我们一样可以实现网络电视软件.下面我将带领大家如何实现下图软件的功能,可以让你在同学面前show一把.呵呵.下面的这篇文章摘自编程技巧于维护..我们先参考下面文章的基本功能..(我们可以忽略文章中对声音问题的实现,因为我们基本用不着关于调节声音..)ActiveMovie控件在VC++多媒体程序开发中的应用摘要:本文主要介绍了ActiveMovie控件一些特有的属性、方法和事件,并用一个实例阐述了它在多媒体开发中的使用方法。

关键词:ActiveMovie控件多媒体ActiveMovie控件是微软公司推出的用于多媒体程序设计的控件,它提供了非常完善的音频和视频媒体文件的回放功能,能支持多种文件格式,从最常见的WAV文件和AVI文件到使用MPEG压缩格式的VCD视频文件,都可以正常的进行播放。

控件能根据文件后缀进行自动判别设备类型,并完成相应的控制。

因此,若正在编写的应用程序需要提供多媒体支持,那么使用ActiveMovie控件是一个很好的主意。

事实上,很多优秀的多媒体应用程序,其内部的多媒体回放就是利用ActiveMovie控件来实现。

只要精心地设计应用程序的用户界面,我们一样可以开发出功能齐全、外观漂亮、具有相当水准的多媒体播放器。

而且,在Windows 95/98和Windows NT的最新版本中,ActiveMovie控件已作为操作系统的一部分来提供,即使用户系统中没有安装ActiveMovie控件,Microsoft的许可协议也允许在你的应用程序的发行包中发布ActiveMovie的运行时文件。

本文将首先介绍ActiveMovie控件一些特有的属性、方法和事件,然后使用该控件开发一个具有一定功能的多媒体播放器,最后结合本例谈一谈使用ActiveMovie控件进行多媒体开发时需要注意的几个问题。

VisualC网络编程案例实战之简易网络文件传输器.pptx

VisualC网络编程案例实战之简易网络文件传输器.pptx
• 参数lpszFileName表示需要操作的文件路径,该路径可以是 绝对路径,也可以是相对路径。例如,打开路径为“C:\例 子.txt”的文件,可以将路径直接指定为绝对路径“C:\例 子.txt”。如果路径指定为“.\例子.txt”,那么程序将会在其 所在目录下查找该文件。若文件不存在,则会报错。
• 01 ... //省略部分代码
• 0字2符c数ha组r *text[100];
//定义
• 03 CFile file('C:\例子.txt',CFile:modeReadWrite); //创建 文件对象
• 04 file.Read(text,100); //将文件数据读取到指定缓冲区 中
• 05 file.Write(text,100);//将缓冲区中的数据写到文件中
第10章 简易网络文件传输器
• 网络文件传输是一种基于网络平台的文件操作。通 过简易网络文件传输器可以将需要操作的文件通过 网络在两台计算机上实现数据异地传输功能。例如, 现在非常流行的P2P(点对点)传输功能就是通过网 络实现用户异地下载或上传文件。本章将讲解使用 socket和CFile类在两台主机上传输文件的方法。
• CFile file(“C:\例子.txt”,CFile:modeReadWrite); //创建文件对象
• 用户通过上面的代码,可以创建一个文件对象,并与指 定文件相关联,为其设置了打开方式为读写 “CFile::modeReadWrite”。
• 对于用户而言,以上两种构造函数在使用上均可以达到 目的。只是在打开文件时,前者需要显式地调用函数 Open()打开文件,而后者则在文件对象创建的同时打开 文件,属于隐式。
意义 创建新文件并覆盖原有文件 创建文件但不覆盖原有文件 以只读方式打开文件 以只写方式打开文件 以可读写方式打开文件 不允许其他进程读写文件 不允许其他进程读文件 不允许其他进程写文件 允许其他进程读写文件

VC编程实例

VC编程实例

第一页VC++之网络通信技术之获取网上邻居VC++之网络通信技术之获取局域网其它计算机的IP地址VC++之网络通信技术之获取局域网其它计算机名VC++之网络通信技术之获取计算机提供的网络服务VC++之网络通信技术之获取计算机安装的网络协议VC++之数据库技术之更新所有记录VC++之数据库技术之更新特定条件记录VC++之数据库技术之更新指定记录VC++之数据库技术之删除所有记录VC++之数据库技术之删除特定条件记录VC++之数据库技术之删除指定记录VC++之数据库技术之查询编辑框数据VC++之数据库技术之查询日期控件数据VC++之网络通信技术之获取本地MAC地址VC++之网络通信技术之获取本地IP地址第二页VC++之网络通信技术之获取本地PC机名VC++之数据库技术之指定范围匹配查询VC++之数据库技术之基本查询2VC++之数据库技术之遍历记录集VC++之数据库技术之获取记录数据VC++之数据库技术之用ADO连接Oracle数据库VC++之数据库技术之用ADO连接SQL Server数据库VC++之数据库技术之用ADO连接Access数据库VC++之系统硬件信息之判断磁盘驱动器类型VC++之系统硬件信息之获取系统所有磁盘驱动器VC++之系统硬件信息之获取磁盘文件系统名称VC++之系统软件信息之获取磁盘剩余容量大小VC++之系统软件信息之获取磁盘容量大小VC++之系统硬件信息之设置磁盘卷标名称VC++之系统硬件信息之取磁盘卷标名称第三页VC++之系统硬件信息之获取磁盘序列号VC++之系统硬件信息之获取系统BIOS更新日期VC++之系统硬件信息之获取系统BIOS版本号VC++之系统硬件信息之获取显卡BIOS更新日期VC++之系统硬件信息之获取显卡BIOS版本号VC++之系统硬件信息之获取CPU个数VC++之系统硬件信息之获取CPU主频VC++之系统硬件信息之获取CPU制造商名称VC++之系统硬件信息之获取CPU标识VC++之系统硬件信息之获取CPU名称VC++之系统软件信息之获取Windows文件夹位置VC++之系统软件信息之获取System文件夹位置VC++之系统软件信息之获取我的文档文件夹位置VC++之系统软件信息之获取网上邻居文件夹位置VC++之系统软件信息之获取字体文件夹位置第四页VC++之系统软件信息之获取桌面文件夹位置VC++之系统软件信息之获取临时文件夹位置VC++之系统软件信息之获取Windows的版本名称VC++之系统软件信息之获取Windows的内建号VC++之系统软件信息之获取Windows的版本号VC++之系统软件信息之获取IE版本号VC++之系统软件信息之获取操作系统产品名称VC++之系统软件信息之获取操作系统安装系列号VC++之系统软件信息之获取计算机名VC++之系统软件信息之获取当前用户名VC++之系统软件信息之获取系统注册单位名VC++之系统软件信息之获取系统注册单位名VC++之系统控制之设置域名服务器超时VC++之系统控制之隐藏上次登陆用户记录VC++之系统控制之设置IE缓冲区路径第五页VC++之系统控制之删除网页链接中的下划线VC++之系统控制之显示工具栏“字体”按钮VC++之系统控制之改变收藏夹默认路径VC++之系统控制之清空地址栏历史记录VC++之系统控制之让打开的IE窗口最大化VC++之系统控制之IE中禁止显示状态栏VC++之系统控制之IE中禁止显示工具栏VC++之系统控制之修改IE默认主页VC++之系统控制之修改IE标题栏VC++之系统控制之设置桌面墙纸VC++之系统控制之获取操作系统版本号VC++之系统控制之获取当前显示模式VC++之系统控制之设置显示系统当前时间VC++之系统控制之设置启动自动运行程序VC++之系统控制之注销当前用户第六页VC++之系统控制之关闭计算机VC++之系统控制之禁用注册表VC++之系统控制之隐藏任务栏VC++之系统控制之隐藏桌面所有图标VC++之系统控制之隐藏我的文档VC++之系统控制之隐藏回收站VC++之系统控制之隐藏显示驱动器VC++之系统控制之隐藏我的电脑VC++之系统控制之隐藏显示文件注册表之删除子键注册表之设置注册表键值注册表之恢复注册表注册表之备份注册表注册表之注册表读写PIC之中断例一第七页VC++之多媒体编程之多媒体播放器一VC++之多媒体编程之用PC系统播放声音VC++之多媒体编程之左右声道控制VC++之多媒体编程之录音VC++之多媒体编程之CD播放器VC++之文件高级操作之文件读取VC++之文件高级操作之修改文件名VC++之文件高级操作之设置文件属性VC++之文件高级操作之获取文件属性VC++之文件高级操作之复制文件目录VC++之文件高级操作之目录重命名VC++之文件高级操作之移动文件VC++之文件高级操作之删除文件目录VC++之文件高级操作之创建删除文件夹VC++之文件高级操作之检索文件存在?第八页VC++之文件高级操作之文件搜索VC++之文件高级操作之清空回收站VC++之文件高级操作之将文件放入回收站VC++之文件基本操作之基于文档的文件操作VC++之文件基本操作之文档参数设置VC++之文件基本操作之基于CArchive类的文件读写VC++之文件基本操作之高级注册表读写VC++之文件基本操作之读写注册表VC++之文件基本操作之读写INI文件VC++之文件基本操作之文件对话框VC++之文件基本操作之基于MFC的文件读写VC++之图像显示小结VC++之文件基本操作之基于文件流的文件读写VC++文件基本操作之文件高级读写VC++之图像操作之合成图像第九页VC++之图像操作之剪切图像VC++之文件基本操作之文件读写VC++之绘制3D图形小结VC++之绘制3D图形之可控图像旋转VC++之绘制3D图像之图像旋转VC++之绘制3D图形之图形变换VC++之3D图形绘制VC++之图像操作之显示JPG图像VC++之图像操作之缩放图片VC++之图像操作之显示透明图像VC++之复杂图形绘制之小结VC++之复杂图形绘制之旋转文本VC++之复杂图形绘制之绘制带阴影字体VC++之复杂图形绘制之颜色渐变图形VC++之复杂图形绘制之窗口显示完整位图第十页VC++之复杂图形绘制之窗口内显示位图VC++之复杂图形绘制之设置对话框颜色VC++之复杂图形绘制之使用字体对话框VC++之复杂图形绘制之设置实时显示VC++之绘制复杂图形之VC++之复杂图形绘制之绘制饼图VC++之绘制复杂图形之改变图形颜色VC++之绘制复杂图形之改变图形参数VC++之绘制复杂图形之绘制多种图形VC++之绘制复杂图形之绘制正弦曲线VC++之绘制复杂图形之创建复杂直线VC++之简单图形绘制之小结VC++之简单图形绘制之绘制红色扇形VC++之简单图形绘制之绘制连续线条VC++之简单图形绘制之创建透明画刷第十一页VC++之简单图形绘制之用位图填充矩形VC++之简单图形绘制之绘制红色矩形VC++之简单图形绘制之创建渐变直线VC++之简单图形绘制之绘制红色直线VC++之简单图形绘制之绘制直线至整个框架VC++之简单图形绘制之绘制直线超出客户区VC++之简单图形绘制之基于MFC的直线绘制VC++之简单图形绘制之基于API的直线绘制VC++之框架窗体之小结VC++之框架窗体之窗口处于最上层VC++之框架窗体之锁定窗口VC++之框架窗体之切分窗口添加视类VC++之框架窗体之窗口动态效果VC++之框架窗体之动态切分窗口VC++之框架窗体之静态切分窗口第十二页VC++之框架窗体之圆角矩形窗口VC++之文档与视图小结VC++之文档与视图之平滑显示字体VC++之文档与视图之设置字体格式VC++之文档与视图之输入文字VC++之文档与视图之使用路径层VC++之文档与视图之添加文字VC++之文档与视图之创建图形插入符VC++之文档与视图之创建插入符VC++之工具栏与状态栏小结VC++之工具栏与状态栏之工具栏内滚动字体VC++之工具栏与状态栏之显示进度条VC++之工具栏与状态栏之状态栏显示当前时间VC++之工具栏与状态栏之状态栏显示鼠标位置VC++之工具栏与状态栏之调整工具栏第十三页VC++之工具栏与状态栏之浮动工具栏VC++之工具栏与状态栏之显示工具条VC++之工具栏与状态栏之显示隐藏工具栏VC++之工具栏与状态栏之动态加载工具栏VC++之工具栏与状态栏之工具栏的使用VC++之窗口外观之添加程序启动画面VC++之窗口外观之自动变幻图标VC++之窗口外观之创建后修改外观VC++之窗口外观之创建时修改程序外观VC++之窗口外观之修改窗口图标、背景、光标VC++之菜单部分小结VC++之菜单之动态生成菜单_菜单项VC++之菜单之为动态生成菜单添加响应函数VC++之菜之动态插入菜单和菜单项VC++之菜单之动态添加一个菜单第十四页VC++之菜单之右键弹出菜单VC++之菜单之单项菜单生_失效VC++之菜单之隐藏菜单栏VC++之菜单之屏蔽菜单VC++之菜单之图形标记菜单VC++之菜之菜单中文字粗体显示VC++之菜单之菜单标记VC++之控件部分的几个注意点VC++之控件之按钮动态变化VC++之控件之创建向导对话框VC++之控件之员工基本信息VC++之控件之使用颜色对话框VC++之控件之使用字体对话框VC++之控件之使用文件对话框VC++之控件之使用非模态对话框第十五页VC++之控件之使用模态对话框VC++之控件之使用时间控件VC++之控件之使用树控件VC++之控件之使用列表视图控件二VC++之控件之使用列表视图控件一VC++之控件之使用图像列表控件VC++之控件之员工信息管理界面VC++之控件之使用Tab控件VC++之控件之操作滚动条VC++之控件之使用进展条VC++之控件之使用滑动条改变编辑框字体颜色VC++之控件之使用滑动条VC++之控件之添加盘符VC++之控件之多目标关联VC++之控件之权限设置第十六页VC++之控件之员工信息查询系统VC++之控件之IP地址设置VC++之控件之编辑框的应用VC++之控件之人员信息输入VC++之控件之计算器VC++之控件之同步输入输出VC++之控件之彩色编辑框VC++之控件之改变编辑框内字体颜色VC++之控件之对话框控件组合应用VC++之控件之静态控件应用一。

VC++高级程序设计大作业_基于局域网的聊天室设计与开发

VC++高级程序设计大作业_基于局域网的聊天室设计与开发

基于局域网的聊天室设计与开发摘要系统是在在VC++6.0开发环境下使用基于对话框架构和网络编程技术实现了一个基于局域网的聊天室。

系统分为客户端程序和服务器端程序,两者分开运行。

服务器提供主机IP地址和端口供众多的客户端连接。

既可以一对一聊天,也可以一对多聊天。

关键字:聊天室;局域网;基于对话框;Socket通信目录1.开发环境介绍 01.1 Visual C++6.0集成开发环境使用方法介绍 01.2WinSock技术 (5)1.2.1WinSock概述 (5)1.2.2CSocket类编程模型 (6)2.基于局域网的聊天室设计 (7)2.1系统总体目标 (7)2.2系统功能模块图 (7)3.基于局域网的聊天室实现 (9)3.1 服务器开启与客户连接以及局域网通信 (9)3.2系统各个模块的实现 (11)3.2.1服务器 (11)3.2.2客户端 (17)4.系统测试 (21)5. 总结 (22)参考文献 (22)1.开发环境介绍1.1 Visual C++6.0集成开发环境使用方法介绍本系统涉及的C++语言源程序,均在Visual C++ 6.0(后简称VC6)开发环境中进行编制和调试。

这里将简要介绍VC6集成开发环境的使用和调试方法。

1.VC6的用户界面介绍双击安装好的VC6图标后,可以看到附图1.1所示的界面,此时VC6处于编辑状态。

图1.1 VC++ 6.0编辑状态的用户界面其中菜单栏集成了VC6的各种命令、功能和设置;工具栏则将最常用的命令、功能和设置直接用图标的形式给出,方便用户使用;“Workspace”子窗口(工作空间子窗口)可以把VC6工程中使用的各种类和文件按树形结构来浏览;文件子窗口则用来具体显示和编辑VC6工程所用到的文件,比如C++源文件、头文件等;输出子窗口用来显示编译、连接或者搜索等操作的结果。

2.VC 6集成开发环境的使用简介(1)创建VC6工程要使用VC6来编译一个C或者C++源文件,必须把这个文件插入一个VC6工程中,因此,先介绍VC6工程的创建步骤:①点击“File”菜单,选择“New…”菜单项,弹出“New”窗口;②切换“New”窗口选项卡为“Projects”,选择“Win32 Console Application”(Win32控制台应用程序),本书只使用这类工程即可;③在“Location:”下的文本框内填入工程保存的文件夹位置,也可以点其右侧的“…”按钮来定位文件夹;④在“Project name:”下的文本框内填入工程的名称,例如Prj1。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

网络程序设计实例
Cs2A.sin_addr.s_addr =inet_addr(Cs2IP);
//向Windows注册网络事件
WSAAsyncSelect(s1,hW,WM_USER+1,FD_READ);
网络程序设计实例
char recvBuf[200]; int len; #define Cs1Port 8000 #define Cs2Port 6000 #define Cs1IP "127.0.0.1" #define Cs2IP "127.0.0.1"
//存放接收到的字节数 //本地端口号 //远程端口号 //本地IP地址 //远程IP地址
hI,HINSTANCE hP,LPSTR lp,int nC)
网络程序设计实例
{
MSG msg;
HWND hWnd;
//实例句柄存入全局量hInst
hInst = hI;
WNDCLASS wc;
memset(&wc,0,sizeof(WNDCLASS));
wc.lpfnWndProc = (WNDPROC)WndProc;
网络程序设计实例
网络程序设计实例
.1 使用Winsock API设计网络程序的实例 .2 使用MFC类库进行网络程序设计的实例 .3 基于WinInet API的客户程序编写实例 .4 原始套接口(SOCK_RAW)程序设计实例 .5 广播通信与组播通信程序设计实例 习题
网络程序设计实例
.1 使用Winsock API设计网络程序的实例
网络程序设计实例
{
switch (msg)
{
case WM_DESTROY:
//关闭程序触发事件
//向Windows注销Socket触发事件
WSAAsyncSelect(s1, hW, 0, 0);
//释放连接
closesocket(s1);
//卸载动态链接库Winsock DLL
WSACleanup( );
网络程序设计实例 //本地IP地址 Cs1A.sin_addr.s_addr =inet_addr(Cs1IP); //进行本地绑定 len=bind(s1,(struct sockaddr *) &Cs1A,sizeof(Cs1A));
//远程地址类型 Cs2A.sin_family=AF_INET; //远程端口 Cs2A.sin_port = htons(Cs2Port); //远程IP地址
WndProc(HWND, UINT,
///////////////////////////////////////////////////////////////////////////////// /////////////////////
int
APIENTRY
WinMain(HINSTANCE
.1.1 程序源代码 1.UDP程序1的源代码 //编程环境:VC 6.0 //程序说明:基于用户数据报协议UDP的程序实例 //程序功能:在窗口中点击鼠标左键,则发送信息
到端口号为6000的远程机上,并可以从端 // 口号6000的远程机接收数据
网络程序设计实例
#include "stdafx.h" #include <Winsock.h>
PostQuitMessage(0);
网络程序设计实例
break; case WM_CREATE: //初始化触发事件 //装载动态链接库Winsock DLL WSAStartup(0x0202, &ws); //创建UDP套接字 s1=socket(AF_INET, SOCK_DGRAM,0); //设置地址类型 Cs1A.sin_family=AF_INET; //本地端口 Cs1A.sin_port = htons(Cs1Port);
wc.hInstance
= hI;
wc.hIcon =LoadIcon(NULL, IDI_APPLICATION);
网络程序设计实例
wc.hbrBackground
=
(HBRUSH)COLOR_WINDOW;
wc.lpszClassName
= "W1";
RegisterClass(&wc);
hWnd=CreateWindowEx(WS_EX_PALETTEWIND OW,"W1","UDP程序1[端口:8000]", WS_OVERLAPPEDWINDOW, 100,100,200,100, NULL, NULL, hI, NULL);
///////////////////////////////////////////////////////////////////////////////// //////////////////////
//说明全局量
HINSTANCE hInst;
LRESULT CALLBACK WPARAM, LPARAM);
网络程序设计实例
return msg.wParam; }
////////////////////////////////////////////////////////// /////////
//定义Winsock API需要的量 WSADATA ws; SOCKET s1,s2; struct sockaddr_in Cs1A,Cs2A; //发送数据缓冲 char sendBuf[200]; //接收数据缓冲
////////////////////////////////////////////////////////////////////////////////////////// ////////////////////
//消息处理
LRESULT CALLBACK WndProc(HWND hW, UINT msg, WPARAM wP, LPARAM lP)
网络程序设计实例
if (!hWnd) return FALSE; ShowWindow(hWnd, nC); //主消息循环 while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }
相关文档
最新文档