网络编程课程设计-简单的聊天室程序设计分析

合集下载

网络程序设计课程设计--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}}。

网络编程基于的简易聊天室实验报告

网络编程基于的简易聊天室实验报告

网络编程课程设计-基于TCP旳简易聊天室一、试验基本信息概要1.题目规定熟悉异步网络编程旳基本措施,掌握异步网络编程和网络协议设计旳措施。

规定采用select 模型、WSAAsyncSelect模型、WSAEventSelect模型、重叠模型或完毕端口等模型完毕编程任务。

2.上机规定规定采用select模型、WSAAsyncSelect模型、WSAEventSelect模型、重叠模型或完毕端口等模型完毕下面旳任务。

3.题目内容内容概要:实现一种聊天室,支持多人聊天。

也可以增长私聊等功能。

4.开发环境操作系统:Windows 7开发语言:C++集成开发环境:Microsoft Visual Studio二、系统简介1.界面本软件使用DOS控制台界面,界面风格较为朴素,没用使用复杂旳颜色。

不过对聊天时界面进行了一定旳控制和修正使得界面较为美观,易读。

服务器:客户端:2.软件功能本软件实现了聊天室基本旳功能,包括公开聊天,私聊,获取在线顾客,更改昵称,获得协助等。

1)公开聊天在光标处直接输入消息后按回车即为发送公开聊天,如下图所示。

2)私聊使用命令【/m 对方UID 消息】即可发送私聊,私聊只有对方可以看到,如下图所示:客户端1,密聊UID为132旳顾客。

发送后客户端2,UID为132旳顾客收到私聊消息。

3)获取在线顾客列表使用命令【/list】即可获得在线顾客列表,顾客列表会议系统消息旳方式返回,如下图所示。

命令发送后4)更改昵称使用命令【/name 你旳新昵称】即可立即更改昵称,成功修改后服务器会以系统消息旳方式返回成功修改旳提醒。

命令命令发送后5)协助信息使用命令【/help】即可查看服务器旳欢迎信息,里面包括了该聊天室旳使用协助,如下图所示。

命令命令发送后3.系统设计开发本软件时,我使用了面向对象旳思想,把服务器和客户端封装成对应旳类,类设计将会在下一节做详细简介。

通行方面我在服务器接受客户端消息,和客户端接受服务器消息时使用了select模型,发送信息我使用旳是一般旳socket原语。

网络编程课程设计简单的聊天室程序设计

网络编程课程设计简单的聊天室程序设计

《网络编程技术课程设计》论文2012 — 2013学年第二学期题目:UDP聊天程序专业班级:网络10-5班学号:姓名:指导老师:日期:2013-6-25【目录】一、引言 (2)二、基础理论 (2)1、UDP协议简介 (2)2、系统需求分析 (3)三、功能设计 (4)1、设计目的 (4)2、设计要求 (4)四、系统实现 (5)1、原理概述 (5)2、程序设计流程 (5)五、设计过程 (6)1、程序设计流程及源代码 (6)源代码 (6)主机A (6)主机B (10)2、调试分析过程描述 (15)3、结果分析 (15)六、结论 (16)[参考文献] (16)一、引言随着计算机科学和Internet 的飞速发展,网上聊天室已成为人们相互交流的一种方式,与E—mail 电话相比,聊天服务更具有实时性和有效性。

本课题是java基于UDP协议的聊天程序。

聊天室分为客户端和服务器端,服务器端程序主要用来负责侦听客户发来的消息,客户端需要等服务器登录成功以后检测到服务器存在的情【关键词】UDP 协议;网络聊天室;.Windows Socket 网络编程二、基础理论1、UDP协议简介Windows Socket 网络编程简介Windows Sockets 规范本意在于提供给应用程序开发者一套简单的API,使应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。

现在的Windows Sockets 已经基本上实现了与协议无关,你可以使用Windows Sockets 来调用多种协议的功能,但较常使用的是TCP/IP 协议。

Socket 实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有Socket 接口的计算机通信。

应用程序在网络上传输,接收的信息都通过这个Socket 接口来实现。

微软为VC 定义了Windows Sockets 类如CAsyncSocket 类和派生于CAsyncSocket 的CSocket 类,它们简单易用。

JAVA课程设计--简单的网络聊天程序

JAVA课程设计--简单的网络聊天程序
s.close();
}
catch (Exception e)
{
//System.exit(-1);
}
}
public void connect()
{
try
{
s = new Socket("127.0.0.1", 8888); //此IP可以修改,如果要可以达到很远的距离聊天不但需要IP地址,
本 科 课 程 设 计
课程设计题目: 简单的网络聊天程序
课程设计报告
1.设计目的:
课程设计题目:简单的网络聊天程序
目的与任务:Байду номын сангаас
目的:熟悉网络编程的知识和技能,掌握Socket编程的方法。
任务:完成网络聊天程序的编制与调试。
要求:
1.分析聊天程序的功能需求。
2.采用自己熟悉的开发环境和语言完成设计任务,如:Java、C++、Visual Basic、SQL server等。
工作安排:
利用网络程序编程来完成这一次课程设计,并且用到多线程和图形界面处理,最后完成课程设计报告。
提交内容:
每位同学提交书面设计报告一份(每人一份)
程序源代码
批语:
成绩:
2014年9月1日
在当今的信息时代,越来越多的聊天工具被应用 ,Java语言是当今流行的网络编程语言,它具有面向对象、与平台无关、安全、多线程 等特点。使用Java语言不仅可以实现大型企业级的分布式应用系统,还能够为小型的、嵌入 式设备进行应用程序的开发。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼我们熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。

网络编程课程设计报告AndroidSocket聊天室

网络编程课程设计报告AndroidSocket聊天室

网络编程课程设计报告课程名称 java程序设计之网络编程题目 Android Socket 聊天室专业信息管理与信息系统班级组长副组长组员指导教师目录5.一、设计目的随着人们对手机的依赖程度越来越深和人们相互之间的交流越来越多,开发一款手机聊天软件便显得尤为重要。

我组开发的手机聊天软件-Android Socket 聊天室不仅可以让人们相互之间的交流变得越来越便捷,而且通过对Android Socket 聊天室的开发,使得我们能更好的掌握网络编程知识,锻炼自己的java编程能力。

二、开发工具和开发环境1、开发工具: Eclipse2、开发环境:JDK三、设计原理1、实现思想Socket是TCP/IP协议上的一种通信,在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。

一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。

2、服务器端工作流程(1)创建服务器端套接字并绑定到一个端口上(2)套接字设置监听模式等待连接请求(3)接受连接请求后进行通信(4)返回,等待赢一个连接请求3、客户端工作流程(1)创建客户端套接字(指定服务器端IP地址与端口号)(2)连接(Android 创建Socket会自动连接)(3)与服务器端进行通信(4)关闭套接字四、系统流程图五、系统设计本课程设计按照系统的具体功能要求,首先应用Socket编程创建客户端和服务器端,每多个客户端服务器端就会相因的创建一个线程,它们之间通过这个连接来实现数据通信;然后在客户端设置一个监听器,用于监听服务器发来的消息。

并根据消息做出不同的动作。

1、系统功能该系统实现了用户之间的点对点单人聊天,在线用户之间的群聊。

在客户端和服务器端都可以查看历史消息、保存消息、清空消息。

为了监控用户之间的状态,服务器还可以实现踢掉用户的功能,同时用户时间文件传输的信息都会在服务器上显示。

2、系统架构1)选择传输控制协议TCP,使用Java的Socket编程机制,分别建立客户端与服务器端;2)分别设计客户端与服务器端的界面,客户端使用的是用安卓开发界面。

网络编程课程设计-java聊天室

网络编程课程设计-java聊天室

网络编程课程设计报告题目:简单聊天室设计院系:专业班级:学号:学生姓名:指导教师:2016 年1 月6 日1.引言1)本课题的来源随着网络普及和上网人数的大增,在国内各大门户网站都架设了大型聊天室。

如:新浪聊天室、中华网社区聊天室、搜狐等都成为网民们的热门聊天室。

以新浪聊天室为例看,聊天室呈现积聚人气作用,并开设不同主题的聊天室以使网民们具有针对性的使用聊天室。

本人计划设计一个实现基于Java语言的聊天室的Windows网络编程,启动服务器后,客户端运行,向服务器端发出请求,连接成功后,会弹出一个聊天室的界面,该界面有私聊(可加入生动的表情描述)、群聊、发送文件等功能,客户可以根据自己的需要选择不同的功能。

具体任务是实现文件的接收功能,启动服务器监听后,接收客户端发来请求,安排线程接收对方发来的文件(例如文档、照片、音乐、电影等)并存入指定的文件夹中。

2)本系统涉及的知识点1、套接字Socket的建立、连接、关闭,客户端和服务器端的输入/输出流的连接。

2、Java中的多线程及线程的常用方法、Runnable接口。

3、基于SWING的图形用户界面设计:布局设计、文本组件、按钮与标签组件、列表组件等。

4、InetAddress类。

5、输入/输出流:文件、文件字节流、文件字符流、缓冲流、数据流。

3)功能要求(1)在服务器端和客户端分别创建一个套接字对象,通过输入输出流连接在一起。

套接字调用close()方法关闭双方的套接字连接。

(2)使用多线程处理套接字连接,把服务器端或客户端读取的数据放在一个单独的线程中去进行,防止服务器端或客户端读取数据可能引起的堵塞。

服务器端收到一个客户的套接字后,应该启动一个专门为该客户服务的线程。

(3)成功连接后,在图形界面中用户可以根据自己的需要进行不同的操作,如:群聊天、和某一个用户单独聊天(可加入生动的表情描述)、发送文件等。

在界面中会显示用户的聊天记录。

4)开发环境的选择在进行开发之前,首先决定的第一个问题就是,该使用什么开发环境来编写该系统?以目前常用的开发语言来讲有C/C++、.NET技术,JAVA、 Visual Basic 几种。

计算机网络课程设计(简单聊天程序的实现)

计算机网络课程设计(简单聊天程序的实现)

编号:计算机网络课程设计说明书题目:本地计算机网络信息管理系别:计算机科学与技术专业:计算机科学与技术学生姓名: xxx学号: ***********指导教师: xx2011年 3 月 18 日摘要本机网络信息管理器提供了有关计算机性能的信息,并显示了计算机上主要设备信息;如果连接到网络,那么还可以查看网络状态并迅速了解网络是如何工作的。

它的用户界面提供了设置网络信息的选项,其下还有具体的内容设置,而且这里可以查看到当前系统的CPU使用比率、内存等数据,默认设置下系统每隔两秒钟对数据进行1次自动更新。

目录1.绪论 (01)1.1 IP/TCP协议常识 (08)1.2 Socket的简介 (09)2.规划设计 (11)2.1 课题来源 (11)2.2 需求分析 (11)3.系统分析与设计方案 (12)3.1 聊天系统的总体设计要点 (12)3.2 聊天系统的设计步骤及功能模块划分 (12)3.3 功能模块结构图 (13)4.系统设计环境与测试 (26)4.1 开发环境和工具 (26)4.2 硬件环境 (26)4.3 聊天系统的测试 (26)5.课程设计总结 (28)5.1 课程设计总结 (28)5.2 经验和感想 (28)参考文献 (31)1绪论随着互联网逐步普及,人们的生活和工作也越来越离不开信息网络的支持,而聊天室是人们最常见,最直接的网上交流的方式。

本信息管理系统以网络设置为主,为广大用户提供一个简洁的、方便的网络设置方式,也是使网络设置更简单,更适用于对电脑了解不多的用户。

本文所介绍的网络信息管理系统是基于开放的C#应用程序开发设计的,其主要特性是能动态、实时的完成信息的传递,且具有高效的交互性,更有效的反映本机的网络设置状况,易于维护和更新,其运行所需环境及其工作流程和各个功能控件的工作原理将在本文依次介绍,并且文中提供了部分程序源代码。

1.1 IP/TCP协议常识(1)IP、TCP协议的特点:TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议/网际协议的缩写, TCP/IP是当今网络互联的核心协议。

c网络聊天室课程设计

c网络聊天室课程设计

c 网络聊天室课程设计一、教学目标本课程旨在让学生了解网络聊天室的基本原理和功能,掌握C语言在网络编程中的应用,培养学生具备网络编程的基本能力和解决实际问题的能力。

具体目标如下:1.知识目标:(1)了解网络聊天室的基本概念和原理;(2)掌握C语言在网络编程中的基本方法;(3)理解网络编程中的Socket编程和TCP/IP协议。

2.技能目标:(1)能够使用C语言编写简单的网络聊天室程序;(2)能够分析和解决网络编程中的基本问题;(3)能够运用所学知识,独立完成网络编程项目。

3.情感态度价值观目标:(1)培养学生对网络编程的兴趣和热情;(2)培养学生团队协作和自主学习的能力;(3)培养学生具备良好的网络编程道德和法律法规意识。

二、教学内容本课程的教学内容主要包括以下几个部分:1.网络聊天室的基本概念和原理:介绍网络聊天室的定义、功能和应用场景。

2.C语言在网络编程中的应用:讲解C语言在网络编程中的基本方法,如Socket编程、TCP/IP协议等。

3.网络编程实践:通过案例教学,让学生动手编写网络聊天室程序,培养实际操作能力。

4.项目实践:学生分组完成网络编程项目,提高团队协作和解决实际问题的能力。

三、教学方法为了提高教学效果,本课程将采用以下教学方法:1.讲授法:讲解网络聊天室的基本概念、原理和方法。

2.案例分析法:分析典型网络聊天室程序,让学生了解实际应用。

3.实验法:让学生动手编写网络聊天室程序,培养实际操作能力。

4.讨论法:分组讨论项目实践中的问题,提高团队协作和解决问题的能力。

四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:《C语言网络编程教程》等。

2.参考书:《网络编程技术手册》、《TCP/IP协议详解》等。

3.多媒体资料:网络聊天室程序示例、教学视频等。

4.实验设备:计算机、网络设备等。

五、教学评估本课程的教学评估将采用多元化的评价方式,全面客观地评价学生的学习成果。

简单聊天程序的设计与实现课程设计

简单聊天程序的设计与实现课程设计
四川师范大学成都学院设计的总结和体会该次课程设计的制作我主要是参照了图书馆内的相关书籍找到一个类似的程序然后按照书上的内容一步步的做出来了虽然这个程序算不上是我自己写出来的但通过这样的一个过程还是让我学会了很多东西也算能比较熟练地掌握mfc这一个软件了这算是一个不小的收获吧而且在做这个程序的过程中让我认识到了在做这样程序中遇到解决不了的问题与同学的讨论时很重要的譬如可以以运行但是就是无法出现连接的显示和状态
四川师范大学成都学院
GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon; } else { CDialog::OnPaint(); } } HCURSOR CServerDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CServerDlg::OnBnStart() { // 创建套接字 m_Server.Create(m_iNetPort); // 开始监听
图 4.5 为用户张三连接服务器界面,在输入用户名张三并点击确定后,出现如下界面:
四川师范大学成都学院
图 4.6 为用户李四的连接界面, 在李四连接后, 张三和李四用户同时出现在用户列表内:
图 4.7 为用户李四的连接界面,在王五连接后,张三,李四和王五用户同时出现在用户 列表内:
四川师范大学成都学院
服务器显示:在张三,李四,王五进入聊天室后的界面为图 4.8:
图 4.8 用户成功登陆后界面
开始聊天,群聊:客户端发送信息时的界面为图 4.9
四川师范大学成都学院
图 4.10 为私聊界面。张三与李四私聊,点击私聊选项,并发送私聊内容。

JAVA课程设计报告聊天室

JAVA课程设计报告聊天室

JAVA课程设计报告聊天室一、课程目标知识目标:1. 学生能理解网络编程的基本概念,掌握JAVA Socket编程的基础知识。

2. 学生能运用面向对象编程思想,设计并实现聊天室客户端与服务器的数据传输功能。

3. 学生了解并掌握多线程技术在网络编程中的应用。

技能目标:1. 学生能运用所学知识,独立编写并调试简单的聊天室程序。

2. 学生具备分析问题、解决问题的能力,能针对聊天室程序进行优化和改进。

3. 学生能在团队协作中发挥自己的作用,与他人共同完成一个完整的网络编程项目。

情感态度价值观目标:1. 学生培养对计算机编程的兴趣,增强学习JAVA的自信心。

2. 学生认识到团队合作的重要性,培养良好的团队协作精神。

3. 学生通过编程实践,体验创新与创造的乐趣,培养积极向上的学习态度。

本课程针对高年级学生,结合课本内容,注重理论与实践相结合,以提高学生的实际编程能力为主要目标。

课程要求学生在掌握基本知识的基础上,能够独立完成实际项目,培养其分析问题、解决问题的能力。

同时,课程强调团队协作,使学生学会与他人共同进步,共同成长。

通过本课程的学习,使学生达到知识、技能和情感态度价值观的全面提升。

二、教学内容1. 网络编程基础理论:介绍网络编程的基本概念,包括IP地址、端口号、协议等,使学生理解网络通信的基本原理。

- 教材章节:第三章 网络编程基础2. JAVA Socket编程:讲解Socket编程的原理,指导学生掌握客户端与服务器之间的数据传输方法。

- 教材章节:第四章 Socket编程3. 面向对象编程:运用面向对象编程思想,设计聊天室程序,包括类的定义、封装、继承与多态。

- 教材章节:第二章 面向对象编程基础4. 多线程技术:介绍多线程编程的概念,分析在聊天室程序中如何实现多用户并发通信。

- 教材章节:第五章 多线程编程5. 聊天室程序设计与实现:指导学生完成聊天室客户端与服务器的编写,实现基本的功能需求。

java简易聊天室课程设计

java简易聊天室课程设计

java简易聊天室课程设计一、课程目标知识目标:1. 让学生掌握Java网络编程基础知识,理解TCP/IP协议和Socket通信原理;2. 学会使用Java语言构建简易聊天室程序,了解客户端与服务器之间的数据传输过程;3. 了解多线程编程在聊天室中的应用,掌握线程的创建、同步与通信方法。

技能目标:1. 培养学生运用所学知识解决实际问题的能力,具备独立设计并实现简易聊天室程序的能力;2. 提高学生的编程实践能力,学会使用调试工具分析问题、解决问题;3. 培养学生的团队协作能力,学会在项目开发中分工合作、共同进步。

情感态度价值观目标:1. 培养学生对编程的兴趣和热情,提高学习积极性;2. 培养学生勇于尝试、善于思考、面对问题主动解决的良好习惯;3. 增强学生的网络安全意识,学会在聊天过程中保护个人隐私。

分析课程性质、学生特点和教学要求,本课程旨在通过实际操作,让学生深入了解Java网络编程知识,掌握简易聊天室的设计与实现。

课程目标具体、可衡量,便于学生和教师在教学过程中明确预期成果,为后续教学设计和评估提供依据。

1. Java网络编程基础:讲解TCP/IP协议,Socket通信原理,以及常用类和方法;- 课本章节:第五章 网络编程,第1-2节;- 内容安排:网络通信基本概念,Socket编程,ServerSocket编程。

2. 简易聊天室设计与实现:- 课本章节:第五章 网络编程,第3-4节;- 内容安排:客户端与服务器程序设计,多线程实现,字符串处理,异常处理。

3. 聊天室功能拓展:- 课本章节:第五章 网络编程,第5节;- 内容安排:文件传输,用户列表管理,消息加密与解密。

4. 调试与优化:- 课本章节:第六章 异常处理与调试,第1-2节;- 内容安排:使用调试工具,分析问题,优化代码,提高程序稳定性。

5. 项目实践:- 课本章节:第五章 网络编程,第六章 异常处理与调试;- 内容安排:分组进行项目实践,完成简易聊天室程序设计与实现,进行功能拓展和优化。

c++课程设计:网络聊天室

c++课程设计:网络聊天室

c++课程设计:网络聊天室c++课程设计:网络聊天室课程设计报告课程名称:面向对象程序设计C++ 设计题目:网络聊天室专业:计算机科学与技术姓名:学号:指导教师:李晓虹2016 年 1 月 5 日目录 1. 系统需求分析 3 2. 总体设计3 2.1. 服务器端功能3 2.2. 客户端功能3 3. 详细设计4 3.1. 服务端实现4 3.1.1. 服务端布局5 3.2. 客户端实现7 3.2.1. 客户端布局8 4. 系统调试11 5. 结果分析14 6. 总结14 1. 系统需求分析作为当下网络时代下的一员,网络已经无孔不入的融入了我们的生活,世界虽大,但网络将五湖四海的人们联系在一起,作为最直接的交流工具QQ、微信等是当下的主流,从此可以看出,网络聊天广受人们的喜爱。

并且随着Internet的普及和宽带技术的成熟,越来越多的用户进入网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效,与此同时一个新型的Web应用程序为网民之间提供了一个实时通信的功能和场所,这就是聊天室。

网络聊天室也同样的适用于网络会议等正式场合,网络聊天长久伴随我们左右,这也就是开发网络聊天室的意义所在。

本聊天室的需求比较简单,要求首先打开服务器端的端口,获取网络的IP地址,等待客户端用户的连接;而客户端通过设置与服务器端相同的IP地址和端口,从而进入系统,然后开始聊天之旅。

2. 总体设计本课程设计主要是开发一个简单的网络聊天室软件,系统采用C++语言完成,使用VC6.0开发工具在window7平台上开发;本系统分为两个部分,分别为服务器端和客户端,其主要功能介绍如下:2.1. 服务器端功能l 通过对Socket进行初始化,来简单创建服务器l 通过定义变量来保存本机的IP地址,方便与客户端输入的IP地址进行比较,判断用户是否登入成功。

l 通过一个文本框控件,来接收用户发送的信息。

l 服务器端在初始化时首先需要为系统设置一个专用端口,以方便和客户端进行通信。

课程设计网络聊天程序

课程设计网络聊天程序

课程设计网络聊天程序一、课程目标知识目标:1. 让学生掌握网络聊天程序的基本原理和概念,如客户端与服务器通信、数据传输协议等。

2. 学习并理解编程语言中与网络编程相关的库和函数,如套接字编程等。

3. 了解网络聊天程序的安全性和隐私保护措施。

技能目标:1. 培养学生运用所学知识,设计并编写简单的网络聊天程序。

2. 提高学生分析问题、解决问题的能力,使其在遇到网络聊天程序相关问题时,能够独立思考并找到解决方案。

3. 培养学生团队协作能力,通过小组合作完成复杂的网络聊天程序设计。

情感态度价值观目标:1. 激发学生对网络编程的兴趣,提高其学习积极性。

2. 培养学生遵守网络道德规范,注重保护个人隐私,增强网络安全意识。

3. 引导学生认识到网络聊天程序在日常生活和学习中的积极作用,避免沉迷于网络聊天,合理安排时间。

分析课程性质、学生特点和教学要求:本课程为信息技术学科,旨在让学生掌握网络聊天程序的设计与实现。

学生为初中生,具有一定的编程基础和网络知识。

教学要求注重理论与实践相结合,通过实际操作和小组合作,让学生在实践中掌握网络聊天程序的设计方法。

将目标分解为具体的学习成果:1. 学生能够描述网络聊天程序的基本原理和概念。

2. 学生能够运用所学编程知识,编写简单的网络聊天程序。

3. 学生能够在遇到问题时,通过查阅资料、小组讨论等方式,找到解决方案。

4. 学生能够遵循网络道德规范,注重个人隐私保护,具备基本的网络安全意识。

二、教学内容1. 网络聊天程序基本原理:介绍网络聊天程序的工作原理,包括客户端与服务器通信、数据传输过程、数据包结构等。

2. 编程语言网络库和函数:学习Python语言中socket库的使用,了解套接字编程的基本方法,如创建socket、绑定端口、监听连接、数据收发等。

3. 网络聊天程序设计:分析网络聊天程序的功能模块,如用户注册、登录、添加好友、发送消息等,学习如何设计程序架构和流程。

4. 安全性与隐私保护:讲解网络聊天程序中涉及的安全性问题,如数据加密、防止中间人攻击等,以及如何保护用户隐私。

python聊天室功能课程设计

python聊天室功能课程设计

python聊天室功能课程设计一、课程目标知识目标:1. 学生能理解网络编程的基本原理,掌握Python网络编程中客户端和服务器端的通信方法。

2. 学生能运用Python标准库中的socket模块,实现一个简易的聊天室功能。

3. 学生了解并能运用基本的异常处理,保证聊天室程序的稳定性和可靠性。

技能目标:1. 学生能够独立编写Python代码,创建服务器端和客户端程序,并实现消息的发送与接收。

2. 学生通过实践操作,提升问题解决能力,培养编程思维和逻辑思维能力。

3. 学生能够对聊天室程序进行测试,找出并修复其中的错误,提高程序调试能力。

情感态度价值观目标:1. 学生培养对编程的兴趣和热情,激发主动探索网络编程领域的欲望。

2. 学生通过合作开发聊天室项目,学会团队协作,培养沟通与分享的良好习惯。

3. 学生认识到编程在现实生活中的应用价值,增强学习责任感,树立正确的价值观。

课程性质:本课程为实践性课程,注重培养学生的动手能力和问题解决能力。

学生特点:学生已具备一定的Python编程基础,对网络编程有初步了解,但实践经验不足。

教学要求:结合学生的特点和课程性质,注重理论与实践相结合,强调动手实践,培养学生自主探究和团队协作能力。

通过本课程的学习,使学生能够将所学知识应用于实际项目中,提高编程技能和综合素养。

二、教学内容1. 网络编程基础理论:复习IP地址、端口号、TCP/IP协议等基本概念,理解客户端与服务器端的通信原理。

相关教材章节:第XX章 网络编程基础2. Python标准库socket模块:学习socket模块的使用方法,包括创建socket对象、建立连接、发送接收数据等。

相关教材章节:第XX章 Python网络编程3. 聊天室功能实现:详细讲解如何使用Python编写服务器端和客户端代码,实现消息的发送与接收。

相关教材章节:第XX章 实战项目:简易聊天室4. 异常处理:学习如何处理程序中可能出现的异常,保证聊天室程序的稳定运行。

java课程设计报告利用java实现简单聊天室

java课程设计报告利用java实现简单聊天室
(3)客户端:
创建一个socket对象,用于连接服务器。
用socket创建流。
通过流和服务器进行交互。
交互完毕,将流和socket关闭。
(4)聊天室:
类名:Client
作用:实现发送即时信息。
继承的接口名:ActionListener
public class Server implements ActionListener{
定义的对象:
count//记录点机关闭按钮次数2次关闭
soconly//只有SOCKET,用于群发
sockets//所有客户的SOCKET
socket_thread//Socket所在的线乘,用于退出;
程序中引入的包:
package Chat;
import .*;
import java.awt.*;
import ;
import javax.swing.*;
import java.util.*;
import java.io.*;
(1)服务器端代码中用户自定义类:
类名:Server
作用:服务器启动
接受请求时候,通过accept()方法,得到一个socket对象。
Socket socket = server.accept();
通过socket创建流(输入,输出)。
BufferedReaderbr=newBufferedReader(newInputStreamReader
(socket.getInputStream()))
类名:LogIn
作用:用户注册登录
继承的接口名:ActionListener
public class LogIn implements ActionListener

Udpwxpython聊天室课程设计

Udpwxpython聊天室课程设计

Udpwxpython聊天室课程设计一、课程目标知识目标:1. 让学生理解UDP协议的工作原理,掌握其在网络通信中的应用。

2. 学习使用Python编程语言实现聊天室功能,了解网络编程的基本方法。

3. 掌握使用wxPython库进行图形界面设计,实现聊天室的界面布局和功能。

技能目标:1. 培养学生运用Python编程实现网络通信功能的能力。

2. 培养学生利用wxPython库设计美观、实用的图形界面的能力。

3. 培养学生分析问题、解决问题的能力,提高学生的编程实践技能。

情感态度价值观目标:1. 培养学生对网络编程的兴趣,激发学生主动探索新知识的热情。

2. 培养学生合作意识,学会与他人共同解决问题,培养团队协作精神。

3. 培养学生严谨、踏实的学术态度,注重代码规范和编程习惯。

课程性质:本课程为实践性较强的课程,结合理论教学,注重培养学生的实际操作能力和编程思维。

学生特点:学生具备基本的Python编程基础,对网络通信和图形界面设计有一定了解,但实践经验不足。

教学要求:结合学生特点,注重理论与实践相结合,通过案例教学,引导学生动手实践,提高学生的编程技能和解决问题的能力。

将课程目标分解为具体的学习成果,便于教学设计和评估。

1. 理论部分:- UDP协议原理及其在网络通信中的应用。

- Python网络编程基础,重点介绍socket编程。

- wxPython库的基本使用方法,包括窗口创建、事件处理等。

2. 实践部分:- 设计并实现基于UDP协议的聊天室功能。

- 使用Python编写聊天室服务器和客户端代码。

- 利用wxPython库设计聊天室图形界面。

教学大纲:第一周:UDP协议原理学习,了解网络编程基本概念。

第二周:Python网络编程基础,学习使用socket库。

第三周:wxPython库入门,学习图形界面设计基础。

第四周:结合前三周所学,开始设计聊天室界面和功能。

第五周:编写聊天室服务器和客户端代码,实现基本通信功能。

pythonGui聊天室课程设计

pythonGui聊天室课程设计

pythonGui聊天室课程设计一、课程目标知识目标:1. 学生能理解Python GUI编程的基本概念,掌握使用tkinter库进行图形用户界面设计的方法。

2. 学生能学会使用Python编写基本的聊天室程序,理解客户端与服务器之间的通信原理。

3. 学生能够运用所学知识,结合Python编程技巧,实现一个具备基本功能的聊天室应用程序。

技能目标:1. 学生能够运用tkinter库创建窗口、按钮、文本框等基本图形界面元素,并对其进行事件处理。

2. 学生能够使用Python的网络编程知识,实现聊天室内的信息发送和接收功能。

3. 学生能够通过课程实践,培养问题解决能力、团队协作能力和创新思维能力。

情感态度价值观目标:1. 学生在学习过程中,培养对编程的兴趣和热情,提高对计算机科学的认识和好奇心。

2. 学生通过合作完成课程项目,学会尊重他人意见,培养良好的沟通能力和团队协作精神。

3. 学生能够认识到编程在现实生活中的应用价值,激发他们将所学知识应用于解决实际问题的意识。

课程性质:本课程为实践性较强的课程,注重培养学生的动手能力和实际问题解决能力。

学生特点:学生具备一定的Python编程基础,对网络编程和图形用户界面设计有一定了解,但实践经验不足。

教学要求:教师需引导学生通过自主学习、合作探究和动手实践,将所学知识应用于实际项目中,提高学生的编程能力和团队协作能力。

同时,关注学生的个体差异,提供有针对性的指导和帮助。

通过课程目标的分解和教学设计,确保学生能够达到预期的学习成果。

二、教学内容1. tkinter库基本组件的使用:窗口、标签、按钮、文本框、输入框等。

- 课本章节:第三章 图形用户界面设计2. Python网络编程基础:套接字编程、TCP/UDP协议。

- 课本章节:第五章 网络编程3. 聊天室程序设计原理:客户端与服务器通信、多线程。

- 课本章节:第五章 网络编程、第六章 多线程与网络应用4. 聊天室功能实现:用户登录、消息发送、接收与显示、用户列表管理。

《Java程序设计》课程设计报告-简易聊天室系统

《Java程序设计》课程设计报告-简易聊天室系统

华北科技学院课程设计说明书班级: 信息与计算科学B091学号:姓名:设计题目: 简易聊天室系统设计时间: 2011.12.26 至2011.12.30 指导教师:评语:________________________________ ________________________________________ _________________________________________ _________________________________________ _________________________________________ 评阅成绩:____评阅教师:_____目录1 引言 (1)1.1课程设计选题 (1)1.2课程设计的目的 (1)1.3本选题的设计背景 (1)2.1 功能需求 (1)2.2 系统的开发运行环境 (2)2 总体设计 (2)3.1 系统体系结构设计 (2)3 详细设计与实现 (3)4.1 登录模块 (3)4.2 客户端注册界面模块 (5)4.3 客户端聊天模块 (8)4.4 服务器端模块 (10)4 小结和展望 (13)参考文献 (14)附录 (15)使用说明书 (15)源程序清单 (18)1引言1.1课程设计选题《简易聊天室系统》1.2课程设计的目的使学生巩固和加深以Java 语言为基础的面向对象编程技术理论知识的理解,提高实际动手编程能力的培养,掌握以Java为核心的应用软件开发方案,达到能独立阅读、编制和调试一定规模的Java程序的水平。

1.3本选题的设计背景聊天是是网络中广泛应用的服务之一,特别是现在信息社会对聊天的依赖也越累越大,我们品是在生活中很多人都在用的QQ就是一种很好的聊天工具,它不仅只是聊天那么简单,其它的功能也非常强大。

基于Java语言在网络编程中的广泛应用与我们基本每时每刻都在接触的聊天系统。

我选择尝试对一简单的聊天系统进行开发。

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

《网络编程技术课程设计》论文2012 — 2013学年第二学期题目:UDP聊天程序专业班级:网络10-5班学号:311009040504姓名:王亚歌指导老师:张俊日期:2013-6-25目录一、引言 (2)二、基础理论 (2)1、UDP协议简介 (2)2、系统需求分析 (3)三、功能设计 (4)1、设计目的 (4)2、设计要求 (4)四、系统实现 (5)1、原理概述 (5)2、程序设计流程 (5)五、设计过程 (6)1、程序设计流程及源代码 (6)源代码 (6)主机A (6)主机B (10)2、调试分析过程描述 (15)3、结果分析 (15)六、结论 (16)[参考文献] (16)一、引言随着计算机科学和Internet 的飞速发展,网上聊天室已成为人们相互交流的一种方式,与E—mail 电话相比,聊天服务更具有实时性和有效性。

本课题是java基于UDP协议的聊天程序。

聊天室分为客户端和服务器端,服务器端程序主要用来负责侦听客户发来的消息,客户端需要等服务器登录成功以后检测到服务器存在的情【关键词】UDP 协议;网络聊天室;.Windows Socket 网络编程二、基础理论1、UDP协议简介Windows Socket 网络编程简介Windows Sockets 规范本意在于提供给应用程序开发者一套简单的API,使应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。

现在的Windows Sockets 已经基本上实现了与协议无关,你可以使用Windows Sockets 来调用多种协议的功能,但较常使用的是TCP/IP 协议。

Socket 实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有Socket 接口的计算机通信。

应用程序在网络上传输,接收的信息都通过这个Socket 接口来实现。

微软为VC 定义了Windows Sockets 类如CAsyncSocket 类和派生于CAsyncSocket 的CSocket 类,它们简单易用。

根据传输数据类型的不同,Socket 主要分为三类:1)流式Socket(SOCK—STREAM),在这种方式下,两个通讯的应用程序之闻要先建立一种虚拟的连接,提供可靠的、面向连接的通信流,它使用”TCP” 协议。

从而保证了数据传输的正确性和顺序的。

2) 数据报Socket(SOCK—DGRAM),它使用数据报协议UDP,定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠、无差错。

3)原始Socket,原始套接字允许对底层协议如IP 或ICMP 直接访问,它功能强大但使用较为不便,主要用于一些协议的开发。

UDP 协议简介UDP 协议是一个面向无连接的协议。

其连接的建立不必像TCP 那样需要服务器端侦听,也不需要有客户机请求连接,属于一种“强制”性的网络连接。

提供一对一或一对多的、UDP 无连接的数据报服务。

该服务对消息中传输的数据提供不可靠的、最大努力的传送,这意味着它不保证数据的到达,也不保证所传送的数据报的顺序是否正确,UDP 不重新传输丢失的数据。

其主要工作是:将应用程序传输过来的数据分块交给网络层,确认接受到分组信息。

尽管UDP 无法像TCP 一样提供可靠的数据传输,但UDP 并不比TCP 缺乏优越性。

UDP 在传输效率方面比TCP 要高一些,而且许多应用程序并不需要保证严格的传输可靠性,比如视频会议系统等,需要实时的交互,但并不要求音频视频的绝对正确。

● UDP 优缺点:1.UDP 不要求保持一个连接;2.UDP 没有因接收方认可收到数据包(或者当数据包没有正确抵达而自动重传)而带来的开销;3.设计UDP 的目的是用于短应用和控制消息;4.在一个数据包连接一个数据包的基础上,UDP 要求的网络带宽比TCP 更小。

2、系统需求分析(一)客户需求分析分析客户的需求,这里只列出比较核心的部分。

(1) 只限于局域网内聊天。

(2) 简易的操作界面。

(3) 可以同时与多个人聊天。

(4) 可以保存聊天记录。

(二)性能需求分析(1)可靠性高,能在由于系统问题或其它原因产生错误后,作出相对应处理,比如网络初始化失败、服务器不在线等,可以提示用户安全退出本程序,在出现不可知的错误以后,可以尽量安全的退出程序。

在程序的设计过程中,要求能尽可能多的设想到用户使用过程中可能发生的事件,并能在判断事件后做出相应的处理,使程序具有较高的容错性能。

(2)宜操作性,程序简单易懂,容易上手使用。

设计界面是,简化界面的复杂性,模拟QQ 等现有即时通讯工具的界面,使用户能很容易看懂并使用。

(3)开发文档易理解,保证以后自己开发时,能够清晰的理解整个系统的设计思路和实现细节。

(4)模块化设计此软件的功能,不同的模块实现不同的功能,使得软件易于维护与扩展。

(三)运行需求分析(1)用户界面程序较小,启动速度快,无启动界面。

在本地局域网中使用,所以无需进行用户登录,无需认证界面,启动后的应用界面要清爽,设计要简单明了,要具有较高的易用性。

(2)故障处理在遇到可预知的故障与情况时,能提示用户并自动退出;在遇到不可预知的故障时能安全退出。

三、功能设计开发一个专用于实现两台计算机之间即时通讯的软件,以方便两台计算机之间信息的交流。

,在连接并通信时,尤其是近程的即时通讯,彻底的脱离了远程的服务器,避免了和远程服务器连接时过多的浪费网络资源。

并且避免了服务器忙或与服务器无法连接时,浪费过多时间用于和服务器建立连接!因此,这个软件是极具适应性和实用性的即时通讯软件!本次课程设计的目的是学习基于UDP协议实现网络聊天程序,已达到学会面向无连接方式的程序设计方法,并理解网络编程中面向无连接的概念。

1、课程设计的内容用户数据报(UDP)是一个无连接协议,使用这种协议时,需要在两台计算机之间建立固定的连接,也就是说,通信双方没有服务器和客户机之分,它们之间进行的是对等通信,所以它的优势很明显,是现代通信不可或缺的一部分。

所以,利用它的优势设计一个可以实现私聊和群聊的软件,实现两台计算机间的即时通讯。

2、课程设计要求基于UDP协议实现一对一的聊天的聊天,提供友好的用户界面,便于用户进行操作。

根据目前使用聊天程序的用户需求显示,用户对于聊天程序主要有以下几点要求:(1)聊天功能:可以实现实时接收和发送文字信息,并能支持公聊和私聊的方式。

(2)用户功能:可以查看对方的开放信息,以及发送方的IP四、系统实现1、原理概述采用UDP协议,通过服务器中转方式。

因此,现在的IP侦探在你仅仅跟对方发送聊天消息的时候是无法获取到IP的。

UDP 协议是不可靠协议,它只管发送,不管对方是否收到。

但它的传输很高效,因为UDP协议排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。

例如,腾讯采用了上层协议来保证可靠传输:如果客户端使用UDP协议发出消息后,服务器收到该包,需要使用UDP协议发回一个应答包。

如此来保证消息可以无遗漏传输。

2、程序的开发步骤如下:1、创建UDPmessage类,继承JFrame成为框体类,并实现ActionListener接口。

该类中包括多个成员变量,它们分别是信息接收文本域,信息发送文本框,IP文本框、“发送”按钮和数据包套接字。

2、在构造方法中初始化窗体组间,并将组间布局到窗体中,然后调用Server()方法创建数据包套接字,并添加“发送”按钮的事件监听器。

3、编写Server()方法,该方法负责创建DatagramSocket数据包套接字和接收信息的DatagramPacket数据包,最重要的是,该方法在线程中使用无限循环实现数据包的接收,这是网络程序设计必须掌握的接收数据的方法,这样才能保证数据的持续接收。

然后获取数据包中的IP信息,也就是数据包发送者的IP地址,这个IP地址将随数据包中的信息一起添加到信息接收文本域中,以区分信息的发布者。

4、实现ActionListener借口中的actionPerformed()方法,该方法用于处理“发送”按钮的单击事件,它需要获取ip文本框中的IP信息,这个IP地址将绑定到准备发送的数据包中。

5、编写本类的main()主方法,只需简单地创建主窗体对象就可以了。

6 . 在两台计算机上分别运行,修改IP文本框中的IP地址为接收一方的IP,输入内容点击放松就可以接收了。

五、设计过程实现代码如下:主机A的代码:package qq;import java.awt.*;import java.awt.event.*;import java.io.IOException;import .*;import javax.swing.*;public class UDPmessage extends JFrame implements ActionListener { /****/private static final long serialVersionUID = 1L;private JTextArea text;//信息接收文本域private JTextField ipText;//IP文本框private JTextField sendText;//信息发送文本框private JButton button;//发送按钮private DatagramSocket socket;//数据报套接字private JScrollBar vsBar;//滚动条public UDPmessage(){setTitle("UDP聊天程序");//设置窗体标题setBounds(100,100,400,300);//窗体定位与大小setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//默认关闭操作为退出程序setLayout(new BorderLayout());//窗体使用边界布局管理器text=new JTextArea();//实例化信息接收文本域text.setEditable(false);//信息接收文本域不可编辑JScrollPane textPanel=new JScrollPane(text);//信息接收文本域添加滚动面板vsBar=textPanel.getVerticalScrollBar();//获取滚动面板的垂直滚动条add(textPanel,BorderLayout.CENTER);//添加滚动面板到窗体居中位置JPanel panel=new JPanel();//创建panel面板BorderLayout panelLayout=new BorderLayout();//创建边界布局管理器panelLayout.setHgap(5);//设置布局水平边界panel.setLayout(panelLayout);//将布局管理器注入panel面板ipText=new JTextField("122.206.73.14");//实例化IP文本框(请输入你自己IP地址)panel.add(ipText,BorderLayout.WEST);//添加文本框到panel面板sendText=new JTextField();//实例化信息发送文本框panel.add(sendText,BorderLayout.CENTER);//添加信息发送文本框到panelbutton=new JButton("发送");//实例化发送按钮panel.add(button,BorderLayout.EAST);//添加按钮到panel面板add(panel,BorderLayout.SOUTH);//添加面板到窗体setVisible(true);//显示窗体server();//调用Server()方法button.addActionListener(this);//添加按钮事件监听器}private void server(){try{socket=new DatagramSocket(9527);//实例化数据报套接字byte[] buf=new byte[1024];final DatagramPacket dpl=new DatagramPacket(buf,buf.length);//创建接收数据的数据包Runnable runnable=new Runnable(){//定义线程public void run(){while(true){ //使用无限循环体try{Thread.sleep(100);//线程休眠时间为100mssocket.receive(dpl);//接收数据包int length=dpl.getLength();String message=new String(dpl.getData(),0,length);//获取数据包的字符串信息String ip=dpl.getAddress().getHostAddress();if(!InetAddress.getLocalHost().getHostAddress().equals(ip))text.append(ip+":\n "+message+"\n");vsBar.setValue(vsBar.getMaximum());//控制信息滚动}catch(IOException e){e.printStackTrace();}catch(InterruptedException e){e.printStackTrace();}}}};new Thread(runnable).start();}catch(SocketException e){e.printStackTrace();}}public void actionPerformed(ActionEvent ev){try{String ip=ipText.getText();//获取IP文本框内容InetAddress address=InetAddress.getByName(ip);byte[] data=sendText.getText().getBytes();//获取发送的数据DatagramPacket dp=new DatagramPacket(data,data.length,address,9527);//定义数据包String myip=InetAddress.getLocalHost().getHostAddress();//获取本机IP//将发送信息添加到信息接收文本域中text.append(myip+":\n "+sendText.getText()+":\n");socket.send(dp);//发送数据包sendText.setText(null);}catch(UnknownHostException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();}}public static void main(String[] args) {UDPmessage udp= new UDPmessage();udp.setVisible(true);}}运行后的对话框主机B的代码:package qq;import java.awt.*;import java.awt.event.*;import java.io.IOException;import .*;import javax.swing.*;public class UDPmessage extends JFrame implements ActionListener { /****/private static final long serialVersionUID = 1L;private JTextArea text;//信息接收文本域private JTextField ipText;//IP文本框private JTextField sendText;//信息发送文本框private JButton button;//发送按钮private DatagramSocket socket;//数据报套接字private JScrollBar vsBar;//滚动条public UDPmessage(){setTitle("UDP聊天程序");//设置窗体标题setBounds(100,100,400,300);//窗体定位与大小setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//默认关闭操作为退出程序setLayout(new BorderLayout());//窗体使用边界布局管理器text=new JTextArea();//实例化信息接收文本域text.setEditable(false);//信息接收文本域不可编辑JScrollPane textPanel=new JScrollPane(text);//信息接收文本域添加滚动面板vsBar=textPanel.getVerticalScrollBar();//获取滚动面板的垂直滚动条add(textPanel,BorderLayout.CENTER);//添加滚动面板到窗体居中位置JPanel panel=new JPanel();//创建panel面板BorderLayout panelLayout=new BorderLayout();//创建边界布局管理器panelLayout.setHgap(5);//设置布局水平边界panel.setLayout(panelLayout);//将布局管理器注入panel面板ipText=new JTextField("122.206.73.136");//实例化IP文本框(请输入你自己IP 地址)panel.add(ipText,BorderLayout.WEST);//添加文本框到panel面板sendText=new JTextField();//实例化信息发送文本框panel.add(sendText,BorderLayout.CENTER);//添加信息发送文本框到panel button=new JButton("发送");//实例化发送按钮panel.add(button,BorderLayout.EAST);//添加按钮到panel面板add(panel,BorderLayout.SOUTH);//添加面板到窗体setVisible(true);//显示窗体server();//调用Server()方法button.addActionListener(this);//添加按钮事件监听器}private void server(){try{socket=new DatagramSocket(9527);//实例化数据报套接字byte[] buf=new byte[1024];final DatagramPacket dpl=new DatagramPacket(buf,buf.length);//创建接收数据的数据包Runnable runnable=new Runnable(){//定义线程public void run(){while(true){ //使用无限循环体try{Thread.sleep(100);//线程休眠时间为100mssocket.receive(dpl);//接收数据包int length=dpl.getLength();String message=new String(dpl.getData(),0,length);//获取数据包的字符串信息String ip=dpl.getAddress().getHostAddress();if(!InetAddress.getLocalHost().getHostAddress().equals(ip))text.append(ip+":\n "+message+"\n");vsBar.setValue(vsBar.getMaximum());//控制信息滚动}catch(IOException e){e.printStackTrace();}catch(InterruptedException e){e.printStackTrace();}}}};new Thread(runnable).start();}catch(SocketException e){e.printStackTrace();}}public void actionPerformed(ActionEvent ev){try{String ip=ipText.getText();//获取IP文本框内容InetAddress address=InetAddress.getByName(ip);byte[] data=sendText.getText().getBytes();//获取发送的数据DatagramPacket dp=new DatagramPacket(data,data.length,address,9527);//定义数据包String myip=InetAddress.getLocalHost().getHostAddress();//获取本机IP//将发送信息添加到信息接收文本域中text.append(myip+":\n "+sendText.getText()+":\n");socket.send(dp);//发送数据包sendText.setText(null);}catch(UnknownHostException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();}}public static void main(String[] args) {UDPmessage udp= new UDPmessage();udp.setVisible(true);}}运行后的界面实现对话后,主机A的显示:主机B的显示:2、调试分析与过程总结1遇到的问题和解决方法:在创建窗体时,由于对有些控件不了解,所以在应用时,查找了一些相关资料,学会了如何添加和使用。

相关文档
最新文档