版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、使用C/C+实现Socket聊天程序Initsock.h 文件/ initsock.h 文件#include <winsock2.h>#include <stdlib.h>#include <conio.h>#include <stdio.h>#pragma comment(lib, "WS2_32"> / 链接到 WS2_32.libclass CInitSockpublic:CInitSock(BYTE minorVer = 2, BYTE majorVer = 2>/ 初始化 WS2_32.dllWSADAT
2、A wsaData 。WORD sockV ersion = MAKEWORD(minorVer, majorVer> 。 if(:WSAStartup(sockV ersion, &wsaData> != 0>exit(0> 。CInitSock(>:WSACleanup(> 。TCP版TCPClient.cpp 文件/ TCPClient.cpp 文件/*使用说明0.运行程序前请查看是否将 initsock.h 文件引入到项目中。1首先修改聊天对方的IP地址2请首先运行服务端<TCPServer)程序,再运行客户端 <TCPCIien
3、t)程序: 如配置正确服务端会收到相关连接信息。3连接成功后,需要由服务器端首先发起会话< 输入消息并确认发送),客户端收到消息后才能输入消息并确认发送到服务器端。 并且双方每次只能发送一条消息。如想发送第二条消息,需要等待该方成功 接受到另一方的消息后才能继续输入消息。*/#in elude "In itSock.h"#in clude <stdio.h>#include <iostream.h>CInitSock initSock 。 / 初始化 Winsock 库int main(>/ 创建套节字SOCKET s = :socket
4、(AF_INET, SOCK_STREAM, IPPROTO_TCP> 。 if(s = INV ALID_SOCKET>printf(" Failed socket(> n"> 。return 0 。/ 也可以在这里调用 bind 函数绑定一个本地地址/ 否则系统将会自动安排/ 填写远程地址信息sockaddr_in servAddr 。servAddr.sin_family = AF_INET 。servAddr.sin_port = htons(4567> 。/注意,这里要填写服务器程序<TCPServer程序)所在机器的IP地址/
5、 如果你的计算机没有联网,直接使用127.0.0.1即可servAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.129"> 。if(:connect(s, (sockaddr*>&servAddr, sizeof(servAddr>> = -1>printf(" Failed connect(> n"> 。return 0 。char buff256 。char szText256 。while(TRUE>/从服务器端接收数据int nRecv =
6、:recv(s, buff, 256, 0> 。if(nRecv > 0>buffnRecv = '0' 。printf(" 接收到数据: %sn", buff> 。/ 向服务器端发送数据cin>>szText 。szText255 = '0' 。:send(s, szText, strlen(szText>, 0> 。/ 关闭套节字:closesocket(s> 。return 0 。TCPServer.cpp 文件/ TCPServer.cpp 文件/*使用说明0.运行程序前请查看是否
7、将 initsock.h 文件引入到项目中。1. 首先修改聊天对方的IP地址2. 请首先运行服务端<TCPServer)程序,再运行客户端<TCPCIient)程序: 如配置正确服务端会收到相关连接信息。3. 连接成功后,需要由服务器端首先发起会话<输入消息并确认发送) ,客户端收到消息后才能输入消息并确认发送到服务器端。 并且双方每次只能发送一条消息。如想发送第二条消息,需要等待该方成功 接受到另一方的消息后才能继续输入消息。*/#incIude "InitSock.h"#incIude <stdio.h>#incIude <iostr
8、eam.h>Clni tSock ini tSock。/ 初始化 Win sock 库int main(>/ 创建套节字SOCKET sListen = :socket(AF_INET, SOCK_STREAM, IPPROTO_TCP> 。if(sListen = INV ALID_SOCKET>printf("FaiIed socket(> n"> 。return 0 。/ 填充 sockaddr_in结构sockaddr_in sin 。sin.sin_famiIy = AF_INET 。sin.sin_port = htons(4
9、567> 。sin.sin_addr.S_un.S_addr = INADDR_ANY 。/ 绑定这个套节字到一个本地地址if(:bind(sListen, (LPSOCKADDR>&sin, sizeof(sin>> = SOCKET_ERROR>printf("FaiIed bind(> n"> 。return 0 。/ 进入监听模式if(:Iisten(sListen, 2> = SOCKET_ERROR>printf("FaiIed Iisten(> n"> 。return
10、 0 。/ 循环接受客户的连接请求sockaddr_in remoteAddr 。int nAddrLen = sizeof(remoteAddr> 。SOCKET sClient = 0 。char szText = " TCP Server Demo! rn" 。while(sClient=0>/ 接受一个新连接sClient = :accept(sListen, (SOCKADDR*>&remoteAddr, &nAddrLen> if(sClient = INV ALID_SOCKET>printf("Fail
11、ed accept(>"> 。printf(" 接受到一个连接: %s rn", inet_ntoa(remoteAddr.sin_addr>> 。 continue 。while(TRUE>/ 向客户端发送数据gets(szText> 。:send(sClient, szText, strlen(szText>, 0> 。/ 从客户端接收数据char buff256 。int nRecv = :recv(sClient, buff, 256, 0> 。if(nRecv > 0>buffnRecv
12、= '0' 。printf(" 接收到数据: %sn", buff> 。/ 关闭同客户端的连接:closesocket(sClient> 。/ 关闭监听套节字:closesocket(sListen> 。return 0 。UDP版/ Chat.cpp : Defines the entry point for the console application./*使用说明0.运行程序前请查看是否将initsock.h文件引入到项目中。1首先修改聊天对方的IP地址2. 运行程序:如配置正确另一方会收到相关连接信息。3. 输入消息:在每次输入完
13、欲发送的消息后,需要连续敲击两次回车。4. 本程序有诸多缺陷:对用户输入的消息不能即时回显到控制台, 需要在敲击两次回车后回显到屏幕。*/#include "stdafx.h"#include <iostream>#include <stdlib.h>#include <STDIO.H>#include <windows.h>#include "InitSock.h"using namespace std。CInitSock initSock 。/ 初始化 Winsock 库DWORD receiverMa
14、rk 。 /接收消息者线程标识符DWORD senderMark 。 /发送者线程标识符/*定义信号量*/DWORD WINAPI Receiver(LPVOID> 。DWORD WINAPI Sender(LPVOID> 。/ 接收数据char buff1024 。sockaddr_in addr 。int nLen = sizeof(addr> 。SOCKET s 。int main(int argc, char *argv>/ 创建套节字s = :socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP>。/u_long iMode =
15、 1 。/ioctlsocket(s, FIONBIO, &iMode> 。if(s = INV ALID_SOCKET>printf("Failed socket(> n"> 。return 0 。/ 填充 sockaddr_in 结构sockaddr_in sin 。sin.sin_family = AF_INET 。sin.sin_port = htons(4567> 。sin.sin_addr.S_un.S_addr = INADDR_ANY 。addr.sin_family = AF_INET 。addr.sin_port =
16、 htons(4567> 。/注意,这里要填写服务器程序所在机器的IP地址/ 如果你的计算机没有联网,直接使用127.0.0.1即可addr.sin_addr.S_un.S_addr = inet_addr("192.168.1.129"> 。 / 绑定这个套节字到一个本地地址if(:bind(s, (LPSOCKADDR>&sin, sizeof(sin>> = SOCKET_ERROR>printf("Failed bind(> n"> 。 return 0 。/ 发送数据 char szTex
17、t = "PC 请求连接 . rn" 。:sendto(s, szText, strlen(szText>, 0, (sockaddr*>&addr, sizeof(addr>> 。 CreateThread(NULL,0,Receiver,NULL,0,&receiverMark> 。CreateThread(NULL,0,Sender,NULL,0,&senderMark> 。 bool isContinue = true 。while(isContinue>if(getche(>=96> /
18、 按 后终止程序运行 isContinue = false 。system("PAUSE"> 。 return 0 。/*接收者*/DWORD WINAPI Receiver(LPVOID lpParam >while(1>int nRecv = :recvfrom(s, buff, 1024, 0, (sockaddr*>&addr, &nLen> 。 if(nRecv > 0>buffnRecv = '0' 。printf(" Received data(%s> : %sn&quo
19、t;, :inet_ntoa(addr.sin_addr>, buff> 。 return 0 。/* *发送者*/DWORD WINAPI Sender(LPVOID lpPara>while(1>cout<<"Input your message: " 。/ 发送数据char text256 。cin>>text 。text255 = '0' 。cout<<text<<endl 。:sendto(s, text, strlen(text>, 0, (sockaddr*>&
20、amp;addr, sizeof(addr>> 。return 0 。本文来自 CSDN 博客,转载请标明出处:使用C/C+实现Socket聊天程序解决该问题的思路解决该问题的整体方案不外有二:<1)基于TCP的Socket连接;<2)基于UDP的Socket连接;但是,针对每种方案又各有很多具体的实现方法。在本次实验中,我先后开发了基于TCP连接和UDP连接的Socket聊天程序。具体实现思路如下:<一) 基于TCP连接Socket聊天程序基于该连接的聊天程序需要至少具备一个服务器端<Server)和一个客户端<Client )。在本程序中,一个用户
21、作为 Server端,另一个用户作为 Clie nt端。也就是说,作为Server端的用 户,需要首先启动程序,等待Clie nt端的连接请求。当TCP连接握手以后,双方方可进行交互。<注:在本程序中Server端并不是单独存在。它也可以向他的Client端发送消息。)但是本程序实现的交互功能十分简单,具有很多限制。当Client端与Server端握手以后,Server端需要首先发起会话;Clie nt端在收到消息后再回复一条消息给Server端;同样,Server端在收到消息后再回复一条消息给Client端以此类推。并且,无论是 Server端还是Client端每次发送消息只能发送一条
22、。造成交互操作具有诸多限制的主要原因是,我在Server端和Client端使用了一个 While循环,它们的伪代码分别如下:Clie nt 端Server 端while(TRUE>从Server端接收消息向Server端发送消息while(TRUE>向Clie nt端发送消息从Clie nt端接收消息二) 基于UDP连接Socket聊天程序基于该连接的聊天程序不需要具备服务器端Server),每个客户端Client)既是服务器端也是客户端。也就是说每个 Clie nt端自身既可以自行接收其它用户发来的消息,也可以向其 它Clie nt端发送消息,不需要事先与其他用户进行握手连接。因
23、为在默认情况下 Win Sock接口的recvfrom(和sen dto(都会在被调用时阻塞当前线程,也 就是说如果程序正在接受其他用户发来的数据,那么它就不能够执行发送数据的任务,反 之相同。所以为解决该问题一般有以下几种解决方案:采用Select模型、WSAAsyncSelect模型、WSAEventSelect 模型、重叠(Overlapped )模型和完成接口 Completion port)模型。在本程序中,因为我没能在短时间内学会上述方案中的任一种,因此采用了 多线程技术去实现消息接收和发送的同步问题。也就是说,在程序中创建两个线程,一个 线程负责发送消息,另一个消息负责接受消息。
24、两个线程交替运行,从而达到同时收发消 息的目的。当然采用多线程方式解决消息收发同步问题可以移除上个程序中每个用户一次 只能发送一条消息的限制。本周开发源代码代码的功能简述使用C/C+实现Socket聊天程序:TCP版:服务器端用户和客户端用户在成功连接后,其中一方通过控制台输入消息,依次 轮流向另一方发送数据。要求,服务器端首先发起会话,并且双方每次只能发送一条消息。UDP版:任一端用户通过指定IP地址将消息发送到另一端的用户。交互双方通过控制台输 入消息向另一方发送数据。没有任何发送限制。开发的收获理解了 TCP连接和UDP连接的基本原理和工作过程。复习了关于Windows多线程及进程同步的
25、相关知识。开发中碰到的主要困难对于TCP版:在考虑如何解决消息的收发同步问题上遇到了困难。最终使用了不佳方案:通过在服务器 端和客户端分别运行while循环并依次进行数据收发工作的方式解决数据收发同步问题。对于UDP版: 同样在考虑如何解决消息的收发同步问题上遇到了困难。但这次使用了多线程解决该问题 开发中未能解决的问题对于UDP版:为何第一次消息输入完毕敲击一次回车后,只有消息的第一个字符没能发送出去,而其它 字符却可以被成功发送出去?而且当第二次输入消息敲回车后消息就能被全部发送出去? 为何消息输入完毕后需要按两次回车键才能将消息发送到另一端?为什么输入的消息不能即时回显到发送者屏幕上?只
26、有当敲击二次回车后用户输入的欲发 送消息才会显现出来?如何才能避免用户在输入消息的同时也能正常接收消息?也就是不至于打断用户已输入的 消息的前提下,显示接收到的消息。针对本周训练内容自己设计的案例案例的主要功能 同代码的功能简述 用到的基本知识相关Win sock编程接口; TCP连接和UDP连接基本工作原理;Win dows多线程;进程同步程序注意了哪些规范代码格式、常量的定义、函数的声明你进行了哪些测试略程序进行了哪些有效性检查略你是如何保证程序的高效率的略本文来自 CSDN 博客,转载请标明出处:北航软件学院一级实践实验报告学号: GS0821594 姓名:叶现一 第 13 周 内容训练
27、使用C/C+实现Socket聊天程序解决该问题的思路解决该问题的整体方案不外有二:1)基于TCP的Socket连接;2)基于UDP的Socket连接;但是,针对每种方案又各有很多具体的实现方法。在本次实验中,我先后开发了基于TCP连接和UDP连接的Socket聊天程序。具体实现思路如下:一) 基于TCP连接Socket聊天程序基于该连接的聊天程序需要至少具备一个服务器端Server)和一个客户端Client )。在本程序中,一个用户作为 Server端,另一个用户作为 Clie nt端。也就是说,作为Server端的用 户,需要首先启动程序,等待Clie nt端的连接请求。当TCP连接握手以后
28、,双方方可进行交互。注:在本程序中Server端并不是单独存在。它也可以向他的Client端发送消息。)但是本程序实现的交互功能十分简单,具有很多限制。当Client端与Server端握手以后,Server端需要首先发起会话;Clie nt端在收到消息后再回复一条消息给Server端;同样,Server端在收到消息后再回复一条消息给Client端以此类推。并且,无论是 Server端还是Client端 每次发送消息只能发送一条。造成交互操作具有诸多限制的主要原因是,我在Server端和Client端使用了一个 While循环,它们的伪代码分别如下:Clie nt 端Server 端while(
29、TRUE从Server端接收消息向Server端发送消息while(TRUE>向Clie nt端发送消息从Clie nt端接收消息二) 基于UDP连接Socket聊天程序基于该连接的聊天程序不需要具备服务器端Server),每个客户端Client)既是服务器端也是客户端。也就是说每个 Clie nt端自身既可以自行接收其它用户发来的消息,也可以向其 它Clie nt端发送消息,不需要事先与其他用户进行握手连接。因为在默认情况下 Win Sock接口的recvfrom(和sen dto(都会在被调用时阻塞当前线程,也 就是说如果程序正在接受其他用户发来的数据,那么它就不能够执行发送数据的任
30、务,反 之相同。所以为解决该问题一般有以下几种解决方案:采用Select模型、WSAAsyncSelect模型、WSAEventSelect 模型、重叠(Overlapped )模型和完成接口 Completion port)模型。在本程序中,因为我没能在短时间内学会上述方案中的任一种,因此采用了 多线程技术去实现消息接收和发送的同步问题。也就是说,在程序中创建两个线程,一个 线程负责发送消息,另一个消息负责接受消息。两个线程交替运行,从而达到同时收发消 息的目的。当然采用多线程方式解决消息收发同步问题可以移除上个程序中每个用户一次 只能发送一条消息的限制。本周开发源代码代码的功能简述使用C/
31、C+实现Socket聊天程序:TCP版:服务器端用户和客户端用户在成功连接后,其中一方通过控制台输入消息,依次轮流向另一方发送数据。要求,服务器端首先发起会话,并且双方每次只能发送一条消息UDP版:任一端用户通过指定IP地址将消息发送到另一端的用户。交互双方通过控制台输 入消息向另一方发送数据。没有任何发送限制。开发的收获理解了 TCP连接和UDP连接的基本原理和工作过程。复习了关于Windows多线程及进程同步的相关知识。 开发中碰到的主要困难对于TCP版:在考虑如何解决消息的收发同步问题上遇到了困难。最终使用了不佳方案:通过在服务器 端和客户端分别运行while循环并依次进行数据收发工作的
32、方式解决数据收发同步问题。 对于UDP版:同样在考虑如何解决消息的收发同步问题上遇到了困难。但这次使用了多线程解决该问题开发中未能解决的问题对于UDP版:为何第一次消息输入完毕敲击一次回车后,只有消息的第一个字符没能发送出去,而其它 字符却可以被成功发送出去?而且当第二次输入消息敲回车后消息就能被全部发送出去? 为何消息输入完毕后需要按两次回车键才能将消息发送到另一端?为什么输入的消息不能即时回显到发送者屏幕上?只有当敲击二次回车后用户输入的欲发 送消息才会显现出来?如何才能避免用户在输入消息的同时也能正常接收消息?也就是不至于打断用户已输入的消息的前提下,显示接收到的消息。针对本周训练内容自
33、己设计的案例案例的主要功能同代码的功能简述用到的基本知识相关Win sock编程接口; TCP连接和UDP连接基本工作原理;Win dows多线程;进程同步程序注意了哪些规范 代码格式、常量的定义、函数的声明 你进行了哪些测试略程序进行了哪些有效性检查略你是如何保证程序的高效率的略 注意:实验报告和案例源代码须在本次小组讨论会前提交 本文来自 CSDN 博客,转载请标明出处:clipboardprint?comment(lib,"ws2_32.lib">#include<winsock2.h>viewplaincopyto#pragma#include&l
34、t;string>usingnamespacestd 。stringstrCurMsg=""。voidrecvProc(SOCKETsockConnect>。charmsgRcv100=0while(true>#include<iostream>if(SOCKET_ERROR=recv(sockConnect,msgRcv,sizeof(msgRcv>,0>>cout<<"nHeisleaving"returnif(msgRcv0!= ''>strCurMsg.erase(
35、strCurMsg.end(>-7,strCurMsg.end(>>strCurMsg+="He said:strCurMsg+=msgRcvstrCurMsg+='n'IIstrCurMsg+="input:system("cls">cout<<strCurMsgintmain(intargc,char* argv>WORDWSADA TAwVersionRequestedwsaDatawVersionRequestederr = WSAStartup( (ifintMAKEWORD( wVer
36、sionRequested, !=errreturnif(HIBYTE(LOBYTE(wsaData.wVersionwsaData.wVersionerr1,&wsaData!=o1|WSACleanup(returnSOCKET sockSrv=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP>sockaddr_in addrSrv memset(&addrSrv,0,sizeof(addrSrv>>addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY>。addrSrv.sin_fam
37、ily=AF_INET。addrSrv.sin_port=htons(5000>。if(bind(sockSrv,(sockaddr*>&addrSrv,sizeof(sockaddr>>=SOCKET_ERROR> cout<<"bind error"<<endl 。 if(listen(sockSrv,5>=SOCKET_ERROR> cout<<"listenerror"<<endl。 SOCKADDR_IN addrClient。int len=si
38、zeof(sockaddr> 。 while(true> cout<<"Waiting " 。SOCKET sockConnect=accept(sockSrv,(sockaddr*>&addrClient,&len> 。if(sockConnect=INV ALID_SOCKET>cout<<"invalidsocket"<<endl 。return0。elsecout<<"Heiscomingn" 。CreateThread(NULL,0
39、,(LPTHREAD_START_ROUTINE>recvProc,(void*>sockConnect,0,NULL> 。 while(true> char buf100=0 。 strCurMsg+="input: "。system("cls">。cout<<strCurMsg。cin.getline(buf,100>。strCurMsg.erase(strCurMsg.end(>-7,strCurMsg.end(>>。strCurMsg+="Yousaid:"。s
40、trCurMsg+=buf。strCurMsg+= 'n'。send(sockConnect,buf,sizeof(buf>,0>。 closesocket(sockConnect>。WSACleanup(>return#pragma0。 comment(lib,"ws2_32.lib"> #include<winsock2.h> #include<iostream>#include<string> using namespace std 。 string strCurMsg="&q
41、uot; 。 void recvProc(SOCKET sockConnect> char msgRcv100=0 。 while(true> if(SOCKET_ERROR=recv(sockConnect,msgRcv,sizeof(msgRcv>,0>> cout<<"nHe is leaving" 。 return 。 if(msgRcv0!= ''>strCurMsg.erase(strCurMsg.end(>-7,strCurMsg.end(>>strCurMsg+="H
42、e said: "strCurMsg+=msgRcvstrCurMsg+='n'IIstrCurMsg+="input:system("cls">cout<<strCurMsgintmain(intargc,char* argv>WORDWSADA TAwVersionRequestedwsaDatawVersionRequestederr = WSAStartup( (ifintMAKEWORD( wVersionRequested, err !=err1,&wsaDatareturnif(HIBYTE(
43、LOBYTE(wsaData.wVersionWSACleanup(returnwsaData.wVersion!=1|cout<<"listenintlen=sizeof(sockaddr>SOCKETwhile(true>cout<<"WaitingsockConnect=accept(sockSrv,(sockaddr*>&addrClient,&len>if(sockConnect=INV ALID_SOCKET>IIcout<<"invalidreturnsocket&qu
44、ot;<<endl0elsecout<<"Heiscomingn"SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP>。sockaddr_in addrSrv 。 memset(&addrSrv,0,sizeof(addrSrv>>。addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY>。addrSrv.sin_family=AF_INET。addrSrv.sin_port=htons(5000>。if(bind(soc
45、kSrv,(sockaddr*>&addrSrv,sizeof(sockaddr>>=SOCKET_ERROR> cout<<"bind error"<<endl 。 if(listen(sockSrv,5>=SOCKET_ERROR> error"<<endl 。addrClientSOCKADDR_IN CreateThread(NULL,0, (LPTHREAD_START_ROUTINE>recvProc,(void*>sockConnect, 0,NULL>
46、while(true>buf100=0IIcharstrCurMsg+="input:system("cls">cout<<strCurMsgcin.getline(buf,100> 。strCurMsg.erase(strCurMsg.end(>-7,strCurMsg.end(>>strCurMsg+="You said:" strCurMsg+=bufstrCurMsg+='n'send(sockConnect,buf,sizeof(buf>,0>closesoc
47、ket(sockConnect>。 WSACleanup(>。return 0 。 全国计算机等级测试网,加入收藏客户端程序代码: view plaincopy to clipboardprint?#pragma comment(lib,"ws2_32.lib"> #include<winsock2.h> #include<iostream> #include<string>usingnamespace std。stringstrCurMsg=""。voidrecvProc(SOCKETsockCli
48、ent>。charmsgRcv100=0while(true> if(SOCKET_ERROR=recv(sockClient,msgRcv,sizeof(msgRcv>,0>> cout<<"nHe is leaving" 。 return 。if(msgRcv0!= ''> strCurMsg.erase(strCurMsg.end(>-7,strCurMsg.end(>>。strCurMsg+="He said: " 。 strCurMsg+=msgRcv。strCu
49、rMsg+= 'n'。strCurMsg+="input: " 。system("cls"> cout<<strCurMsgint main(intargc, char* argv>wVersionRequestedWORDWSADA TA intwVersionRequested wsaData errMAKEWORD(1, 1 >err = WSAStartup( wVersionRequested, &wsaData >if( err != return01>。1if (LOBYTE
50、( wsaData.wVersion>!=1|HIBYTE(wsaData.wVersion >!=1>WSACleanup(>。return1。SOCKET sockClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP> 。 SOCKADDR_IN addrSrv 。 addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1">。addrSrv.sin_family=AF_INET。addrSrv.sin_port=htons(5000>。if (co
51、nnect(sockClient,(sockaddr*>&addrSrv,sizeof(sockaddr>> = SOCKET_ERROR> cout<<"connected failedn" 。 return 1 。 else cout<<"connect OKn" 。CreateThread(NULL,0, (LPTHREAD_START_ROUTINE>recvProc,(void*>sockClient, 0,NULL> 。while(true> char buf100=0 。 strCurMsg+="input: "。system("cls">。cout<<strCurMsg。cin.getline(buf,100>。strCurMsg.erase(strCurMsg.end(>-7,strCurMsg.end(>>。strCurMsg+="Yousaid:"。strCurMsg+=buf。strCurMsg+= '
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026一例妊娠合并低蛋白血症的护理查房教学课件
- 染色师QC管理水平考核试卷含答案
- 壁球制作工岗前风险评估考核试卷含答案
- 海底管道防腐工安全意识模拟考核试卷含答案
- 26年靶向用药饮食禁忌速记
- 医学26年:垂体瘤术后随访管理 查房课件
- 【高中语文】《林教头风雪山神庙》课件++统编版高一语文必修下册
- 旅游线路推介-旅游线路推介-产品介绍
- 2026 减脂期瓜类蔬菜课件
- 公共基础知识模拟试题及复习资料1
- 2026重庆联合产权交易所集团股份有限公司招聘13人考试备考题库及答案解析
- 2026年广东深圳市高三二模高考语文试卷试题(含答案)
- CNCA-C09-02:2025 强制性产品认证实施规则 移动电源、锂离子电池和电池组(试行)
- 2026年天津市河东区中考一模道德与法治试卷和答案
- 水利三类人员安全员b证考试题
- 2025济源市中考历史试卷
- 职业教育励志微课
- 银川市、石嘴山市、吴忠市三市2026年高三年级学科教学质量检测 英语+答案
- 2025-2026学年统编版(新教材)小学道德与法治三年级下册《弘扬家庭美德》教学课件
- 2026年细胞因子释放综合征分级管理临床指南
- 2026年广州民航职业技术学院单招职业适应性测试题库含答案详解(完整版)
评论
0/150
提交评论