




免费预览已结束,剩余21页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
XX大学信息科学技术学院嵌入式系统大作业设计报告项目名称基于Windows CE的网络通信一、设计任务2二、设计原理21、软件设计22、硬件平台3三、设计步骤41、软件程序编写42、 硬件平台搭建8四、软件测试与分析14五、 运行结果18六、附录191、参考资料192、遇到的问题与解决方法193、程序清单194、课程体会27姓名: 学号:班级:日期:2011年6月25日一、设计任务该课程大作业的设计任务是利用Visual Studio 2005编写一个可运行在Windows CE操作系统下的网络通信软件。利用该软件可实现简单的聊天功能,包括信息的发送与接收,完成简单的网络通信。二、设计原理 1、软件设计运用Visual Studio 2005集成开发环境,利用控件创建窗体、菜单栏和菜单选项等,并编辑添加代码以实现相应的功能,最后完成网络通信软件的设计,并在VS2005中进行运行调试。下面是VS2005的简介:Visual Studio 2005是一套完整的开发工具集,用于生成 ASP.NET Web 应用程序、XML Web Services、桌面应用程序和移动应用程序。Visual Basic、Visual C+、Visual C# 和 Visual J# 全都使用相同的集成开发环境 (IDE),利用此 IDE 可以共享工具且有助于创建混合语言解决方案。另外,这些语言利用了 .NET Framework 的功能,通过此框架可使用简化 ASP Web 应用程序和 XML Web Services 开发的关键技术。Visual Studio 2005 是一个高效、集成且可扩展的软件开发生命周期工具平台,可以帮助软件团队提高整个软件开发过程中的通信和协作能力。Visual Studio2005 的成功已被证实,即开发人员偏爱一个具备对他们需要的工具提供接口的集成开发环境。通过将开发人员在开发环境中需要的测试和性能工具(例如,单元测试、代码分析和性能分析)合并在一起。这使开发人员能够在生命周期的较早阶段就改善其代码的质量,而无需中断他们的工作。通过尽早地为开发人员提供他们需要用于识别和解决质量问题的工具,更多的产品缺陷就能够在它们还未构成危害之前即被发现并解决。Visual Studio 2005 包含了一系列高效的、智能的开发工具,不论是为开发初学者,还是为经验丰富的企业开发团队都提供了很多全新的、强大的功能全方位的工具平台,为你提供高效的开发工具。减少开发的复杂度。Visual Studio 2005包括 Windows、Web、移动和基于 Office 的应用。本实验中程序的编写,测试以及通信界面的设计便在此平台上完成的。2、硬件平台通过建立PC机与实验箱间的连接下载已定制好的操作系统镜像NK.bin启动Windows Embedded CE 6.0操作系统。下面是关于Windows CE操作系统的简介:WindowsCE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,是为各种嵌入式系统和产品设计的一种压缩的、具有高效的、可升级的操作系统(OS)。其多线性、多任务、全优先的操作系统环境是专门针对资源有限而设计的。这种模块化设计使嵌入式系统开发者和应用开发者能够定做各种产品,例如家用电器,专门的工业控制器和嵌入式通信设备。Windows CE支持各种硬件外围设备、其它设备及网络系统。包括键盘、鼠标设备、触板、串行端口、以太网连接器、调制解调器、通用串行总线(USB)设备、音频设备、并行端口、打印设备及存储设备。它是精简的Windows 95,Windows CE的图形用户界面相当出色。 2006年11月,微软公司其最新的嵌入式平台Windows Embedded CE 6.0正式上市。作为业内领先的软件工具,Windows Embedded CE 6.0将为多种设备构建实时操作系统,例如:互联网协议(IP)机顶盒、全球定位系统(GPS)、无线投影仪,以及各种工业自动化、消费电子以及医疗设备等。在Windows Embedded诞生十周年之际,微软将首次在“共享源计划”中100%毫无保留地开放Windows Embedded CE 6.0内核,比Windows Embedded CE的先前版本的开放比例整体高出56%。“共享源计划”为设备制造商提供了全面的源代码访问,以进行修改和重新发布,而且不需要与微软或其他方共享他们最终的设计成果。尽管Windows操作系统是一个通用型计算机平台,为实现统一的体验而设计,设备制造商可以使用Windows Embedded CE 6.0这个工具包为不同的非桌面设备构建定制化的操作系统映像。通过获得Windows Embedded CE源代码的某些部分,比如:文件系统、设备驱动程序和其他核心组件,嵌入式开发者可以选择他们所需的源代码,然后编译并构建自己的代码和独特的操作系统,迅速将他们的设备推向市场。 微软还将Visual Studio 2005专业版作为Windows Embedded CE 6.0的一部分一并推出。这对微软来说又是一次史无前例的突破。Windows Embedded CE 6.0重新设计的内核具有32,000个处理器的并发处理能力,每个处理有2GB虚拟内存寻址空间,同时还能保持系统的实时响应。这使得开发人员可以将大量强大的应用程序融入到更智能化、更复杂的设备中。无论在路上、在工作还是在家里,都可以使用这种设备。对于PC机的硬件来说,Windows CE提供以下工具来允许用户通过台式计算机与基于Windows CE的附加设备之间传递信息:建立和维护连接的连接管理器;允许共享数据同步化的数据同步化接口 ; 输入输出文件的文件过滤器。 使台式计算机上的客户能够从安装在基于Windows CE的附加设备的服务器上请求服务,例如本实验中所进行的通信操作。Windows CE设计简单灵活,可在各种小型嵌入式系统中使用,且其功能强大,在最新一代的高性能工业和家用设备中也得到了充分使用。三、设计步骤1、软件程序编写第一步:启动Microsoft Visual Studio 2005,在菜单栏中单击File | New | Projects 菜单,在弹出的对话框左边的Project types(工程类型)中展开Visual C+, 选择Smart Device,在对话框右边的Templates(模板)中选择MFC Smart Device Application;在对话框的下面的Name中输入名字以及工程所保存的位置F:,单击OK按钮。第二步:在窗体上选择WINCE6EEliod,点击next。 第三步:在窗体上选择Dialog based,即左边第二项,完成选择。 下面为界面的设计,包括Static Text,Edit Control,Button等的运用及属性设置如下所示:(图1)Static Text的设置(包括4个Static Text框,分别为信息接收框RECEIVE,信息发送框SEND,名称设置框YourName和一个原始框Static)(图2)Edit Control的设置(包括3个文本编辑框,分别为信息输入框,信息接收显示框和名称输入框)(图3)Button的设置(包括3个按键,分别为服务器端设定按键,客服端设定按键和信息发送确定按键)第四步:利用USB线将目标平台与PC机相连,连通ActiveSync;【图12】ActiveSync自动连接 2、 硬件平台搭建通过网线连接PC机和实验箱,修改PC机IP地址使其与实验箱设备处于同一网段。在PC机上新建超级终端,测试PC机与实验箱是否可以连通。接着按以下步骤启动Windows Embedded CE 6.0操作系统。第1步:从“开始-所有程序-附件-通讯-超级终端”新建一个超级终端链接。【图32】超级终端连接描述第2步:选择连接串口,并将串口波特率设为:38400,数据流选择“无”,按“确正”按键 超级终端选项设置超级终端原始界面第3步:确定一下PC与目标平台的串口接口线已接上,然后打开平台电源开关,Bootloader程序时,按空格键进入Eboot的菜单选项中。 超级终端显示Boot Loader 启动菜单选项第4步:启动Visual Studio 2005,打开编译好的Training工程,在Target-connectivity Option中打开映象的下载配置选项。 Connectivity Options 菜单选项第5步:在Download与Transport 选项都选择“Ethernet”.在Debugger中选择“None”. Target Device Connectivity Options 选项第6步:点击Download选择右边的“Settings”,检测设备名。 Ethernet download Settings 设置选项第7步:用网线连通PC和目标平台,将PC和目标平台的网络连接设置在同一网段,根据超级终端的Eboot菜单提示,选取“D”项,即按键盘上的D键。 目标平台发送广播包选项第8步:在Ethernet Download Settings中,就可以自动检测到目标设备名,点击“Active Devices”中的设备名就可以把设备名添加到“Device Boot Name”中去。然后点击“OK”,再点“Apply”按钮,然后按“Close”按钮关闭“Target Device connectivity Options”窗口. 检测连接选项第9步:从Visual Studio2005的Target-Attach Device菜单中,连接目标平台。 Attach device 菜单选项第10步:在弹出的下载窗口就可以看到下载的进度。 第11步:在超级终端上,可以看到写flash的进度。 第12步:操作系统映像下载完毕后,Windows Embedded CE 6.0操作系统自动启动。Windows CE 启动完成启动界面四、软件测试与分析在软件完成过程中我们遇到目标平台与PC机无法相连和软件代码编译出错的问题,但是经过努力也已经解决.下面我们来对程序进行简单的测试,首先在wince下运行程序,接着进行一下测试:(1) 程序初始状态程序运行时的状态如图所示:代码如下:BOOL CWebChatDlg:OnInitDialog()CDialog:OnInitDialog();/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herem_nStatus=-1;return TRUE; / return TRUE unless you set the focus to a control(2) 对服务器端以及客户端设置的测试 对编译后出现的界面进行服务器端以及客户端的选择,完成设置如下图:通过实际的测试可知结果预期的结果一致。(3) 对创建套接字-绑定-监听-等待连接的测试。服务器端代码如下:void CWebChatDlg:OnBnClickedServer()/ TODO: Add your control notification handler code hereif (m_nStatus!=-1)return;m_nStatus=0;int err;SOCKET socSrv = socket(AF_INET, SOCK_STREAM, 0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(6000);err=bind(socSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR);if (err!=0)AfxMessageBox(_T(绑定不成功!);return;err=listen(socSrv, 5);if (err!=0)AfxMessageBox(_T(监听不成功!);return;SOCKADDR_IN addrClient;int len = sizeof(SOCKADDR);SOCKET sockConn = accept(socSrv, (SOCKADDR*)&addrClient, &len);sockets=sockConn;HANDLE hThread;hThread=CreateThread(NULL,0,ThreadProc,(LPVOID)m_hWnd,0,NULL);CloseHandle(hThread);SetDlgItemText(NAME,_T(服务器端);SetDlgItemText(OUTPUTTEXT,_T(欢迎使用服务器端!);:AfxMessageBox(_T(设置服务器端成功!);客户端代码如下:void CWebChatDlg:OnBnClickedClient()/ TODO: Add your control notification handler code hereif (m_nStatus!=-1)return;m_nStatus=1;int err;SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr = inet_addr();addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(6000);err=connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR);sockets=sockClient;HANDLE hThread;hThread=CreateThread(NULL,0,ThreadProc,(LPVOID)m_hWnd,0,NULL);CloseHandle(hThread);SetDlgItemText(NAME,_T(客户端);SetDlgItemText(OUTPUTTEXT,_T(欢迎使用客户端!);:AfxMessageBox(_T(设置客户端成功!);通过实际的测试可知结果和所要预期的结果一致(4) 对信息的发送的测试当服务器端以及客户端设置完成后,在服务器端或客户端的发送框输入数字点击SEND,测试是否发送成功。代码如下:void CWebChatDlg:OnBnClickedOk()/ TODO: Add your control notification handler code hereCString str,sName;TCHAR *s=new TCHAR200;wchar_t *wch = new wchar_t200;char *ch=new char200;GetDlgItemText(INPUTTEXT,str);SetDlgItemText(INPUTTEXT,_T();GetDlgItemText(NAME,sName);str.Format(_T(%s说:%s),sName,str);wch=str.GetBuffer();DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,wch,-1,NULL,0,NULL,FALSE);WideCharToMultiByte (CP_OEMCP,NULL,wch,-1,ch,dwNum,NULL,FALSE);/MessageBox(wch);send(sockets,ch,strlen(ch)+1,0);GetDlgItem(INPUTTEXT)-SetFocus();通过实际的测试可知结果和所要预期的结果一致。(5) 对信息接收的测试当信息发送后,另一端接收信息,在界面上显示,代码如下:DWORD WINAPI CWebChatDlg:ThreadProc(LPVOID lpParameter)SOCKET sockClient=sockets;HWND hWnd=(HWND)lpParameter;/*TCHAR *recvBuf=new TCHAR200;*/char ch200;char *ch=new char200;int len=sizeof(SOCKADDR);while(true)recv(sockClient,ch,200,0);DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, ch, -1, NULL, 0);wch=new wchar_t200;if(!wch)delete wch;MultiByteToWideChar (CP_ACP, 0,ch, -1,wch , dwNum);/*AfxMessageBox(wch);*/AfxMessageBox(LPCTSTR)ch);/:PostMessage(hWnd,WM_RECVDATA,(WPARAM)dwNum,(LPARAM)wch);:SendMessage(hWnd,WM_RECVDATA,(WPARAM)dwNum,(LPARAM)wch);delete wch;return 0; 通过实际的测试可知结果和所要预期的结果一致。5、 运行结果经过在Visual Studio2005环境中测试和调试后,应用程序没有出现错误。PC机和实验箱建立连接后,在VS2005中点击编译按钮,选择相应设置,软件顺利运行在Windows CE系统上,运行及测试结果如下图:六、附录1、参考资料嵌入式系统设计与开发马文华主编 科学出版社2、遇到的问题与解决方法1在PC机与实验箱的连接时出错,通过重新匹配发现是OS出现问题导致PC机无法与实验箱连接,重新配置OS,连接成功,问题解决。2在界面设计,编译时出现Edit Control文本框无法编辑文字,重新启动VS2005,对界面重新设计,解决问题。3CSocket在Wince里无法使用,用win32 api 代替使用。4字符编码乱码,通过char 和wchar_t之间的转换解决问题。3、程序清单/ WebChat.cpp : Defines the class behaviors for the application./#include stdafx.h#include WebChat.h#include WebChatDlg.h#ifdef _DEBUG#define new DEBUG_NEW#endif/ CWebChatAppBEGIN_MESSAGE_MAP(CWebChatApp, CWinApp)END_MESSAGE_MAP()/ CWebChatApp constructionCWebChatApp:CWebChatApp(): CWinApp()/ TODO: add construction code here,/ Place all significant initialization in InitInstance/ The one and only CWebChatApp objectCWebChatApp theApp;/ CWebChatApp initializationBOOL CWebChatApp:InitInstance()if (!AfxSocketInit()AfxMessageBox(IDP_SOCKETS_INIT_FAILED);return FALSE;/ 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/ Change the registry key under which our settings are stored/ TODO: You should modify this string to be something appropriate/ such as the name of your company or organizationSetRegistryKey(_T(Local AppWizard-Generated Applications);CWebChatDlg dlg;m_pMainWnd = &dlg;INT_PTR nResponse = dlg.DoModal();if (nResponse = IDOK)/ TODO: Place code here to handle when the dialog is/ dismissed with OK/ Since the dialog has been closed, return FALSE so that we exit the/ application, rather than start the applications message pump.return FALSE;/ WebChat.h : main header file for the PROJECT_NAME application/#pragma once#ifndef _AFXWIN_H_#error include stdafx.h before including this file for PCH#endif#ifdef STANDARDSHELL_UI_MODEL#include resource.h#endif/ CWebChatApp:/ See WebChat.cpp for the implementation of this class/class CWebChatApp : public CWinApppublic:CWebChatApp();/ Overridespublic:virtual BOOL InitInstance();/ ImplementationDECLARE_MESSAGE_MAP();extern CWebChatApp theApp;/ WebChatDlg.cpp : implementation file/#include stdafx.h#include WebChat.h#include WebChatDlg.h#ifdef _DEBUG#define new DEBUG_NEW#endifSOCKET sockets;SOCKET arrSock5;int total=0;wchar_t *wch;/HWND hwnd;/ CWebChatDlg dialogCWebChatDlg:CWebChatDlg(CWnd* pParent /*=NULL*/): CDialog(CWebChatDlg:IDD, pParent)m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CWebChatDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CWebChatDlg, CDialog)#if defined(_DEVICE_RESOLUTION_AWARE) & !defined(WIN32_PLATFORM_WFSP)ON_WM_SIZE()#endif/AFX_MSG_MAPON_BN_CLICKED(SERVER, &CWebChatDlg:OnBnClickedServer)ON_BN_CLICKED(CLIENT, &CWebChatDlg:OnBnClickedClient)ON_BN_CLICKED(IDOK, &CWebChatDlg:OnBnClickedOk)ON_MESSAGE(WM_RECVDATA, &CWebChatDlg:OnRecvdata)END_MESSAGE_MAP()/ CWebChatDlg message handlersBOOL CWebChatDlg:OnInitDialog()CDialog:OnInitDialog();/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herem_nStatus=-1;return TRUE; / return TRUE unless you set the focus to a control#if defined(_DEVICE_RESOLUTION_AWARE) & !defined(WIN32_PLATFORM_WFSP)void CWebChatDlg:OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)if (AfxIsDRAEnabled()DRA:RelayoutDialog(AfxGetResourceHandle(), this-m_hWnd, DRA:GetDisplayMode() != DRA:Portrait ? MAKEINTRESOURCE(IDD_WEBCHAT_DIALOG_WIDE) : MAKEINTRESOURCE(IDD_WEBCHAT_DIALOG);#endifvoid CWebChatDlg:OnBnClickedServer()/ TODO: Add your control notification handler code hereif (m_nStatus!=-1)return;m_nStatus=0;int err;SOCKET socSrv = socket(AF_INET, SOCK_STREAM, 0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(6000);err=bind(socSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR);if (err!=0)AfxMessageBox(_T(绑定不成功!);return;err=listen(socSrv, 5);if (err!=0)AfxMessageBox(_T(监听不成功!);return;SOCKADDR_IN addrClient;int len = sizeof(SOCKADDR);SOCKET sockConn = accept(socSrv, (SOCKADDR*)&addrClient, &len);sockets=sockConn;HANDLE hThread;hThread=CreateThread(NULL,0,ThreadProc,(LPVOID)m_hWnd,0,NULL);CloseHandle(hThread);SetDlgItemText(NAME,_T(服务器端);SetDlgItemText(OUTPUTTEXT,_T(欢迎使用服务器端!);:AfxMessageBox(_T(设置服务器端成功!);void CWebChatDlg:OnBnClickedClient()/ TODO: Add your control notification handler code hereif (m_nStatus!=-1)return;m_nStatus=1;int err;SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr = inet_addr();addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(6000);err=connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR);sockets=sockClient;HANDLE hThread;hThread=CreateThread(NULL,0,ThreadProc,(LPVOID)m_hWnd,0,NULL);CloseHandle(hThread);SetDlgItemText(NAME,_T(客户端);SetDlgItemText(OUTPUTTEXT,_T(欢迎使用客户端!);:AfxMessageBox(_T(设置客户端成功!);void CWebChatDlg:OnBnClickedOk()/ TODO: Add your control notification handler code hereCString str,sName;TCHAR *s=new TCHAR200;wchar_t *wch = new wchar_t200;char *ch=new char200;GetDlgItemText(INPUTTEXT,str);SetDlgItemText(INPUTTEXT,_T();GetDlgItemText(NAME,sName);str.Format(_T(%s说:%s),sName,str);wch=str.GetBuffer();DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,wch,-1,NULL,0,NULL,FALSE);WideCharToMultiByte (CP_OEMCP,NULL,wch,-1,ch,dwNum,NULL,FALSE);/MessageBox(wch);send(sockets,ch,strlen(ch)+1,0);GetDlgItem(INPUTTEXT)-SetFocus();DWORD WINAPI CWebChatDlg:ThreadProc(LPVOID lpParameter)SOCKET sockClient=sockets;HWND hWnd=(HWND)lpParameter;/*TCHAR *recvBuf=new TCHAR200;*/char ch200;char *ch=new char200;int len=sizeof(SOCKADDR);while(true)recv(sockClient,ch,200,0);DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, ch, -1, NULL, 0);wch=new wchar_t200;if(!wch)delete wch;MultiByteToWideChar (CP_ACP, 0,ch, -1,wch , dwNum);/*AfxMessageBox(wch);*/AfxMessageBox(LPCTSTR)ch);/:PostMessage(hWnd,WM_RECVDATA,(WPARAM)dwNum,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七彩课堂下册数学试卷
- 政府茶叶采摘活动方案策划(3篇)
- 五一饮料促销活动方案策划(3篇)
- 气泡焊接施工方案(3篇)
- 云南白酒酒窖施工方案(3篇)
- 隐蔽工程房屋施工方案(3篇)
- 心理电影剪辑活动策划方案(3篇)
- 基础安全施工方案(3篇)
- 住宅夹层施工方案(3篇)
- 老年骨质疏松症的护理
- 2025湖南湘潭湘乡市融媒体中心招聘事业单位工作人员10人笔试备考题库及答案解析
- 2025至2030中国婚庆行业发展趋势分析与未来投资战略咨询研究报告
- 2025年职业病诊断医师资格考试(职业性化学中毒)历年参考题库含答案详解(5卷)
- 健康管理师二级《理论知识》模拟考试试卷附答案
- 2025年安徽高考生物试题及答案
- 2025年国际汉语教师资格考试(对外汉语教学理论)历年参考题库含答案详解(5套)
- 2025年高校机房管理试题及答案
- ESG基础知识培训课件
- 泌尿系统常见疾病科普讲座
- 2025湖南省全日制用工劳动合同书
- 2025年中国南海研究院招聘事业编制人员考试笔试试题
评论
0/150
提交评论