nt : Construct ->Creat-> Connect-> Receive-> Close。
下 面 我 就 用 Visual C++ 4.0 的 代 码 段 分 别 介 绍 如 何 运 用 上 述 两 种 方 法 来 实 现Socket 编 程。
1、 利 用 CSocketFile 类 和 Archive 类 实 现
(1)Server
// construct a socket
CSocket sockSrvr;
// create the SOCKET
sockSrvr.Create(nPort);
// start listening
sockSrvr.Listen( );
//construct a new, empty socket
CSocket sockRecv;
// accept connection
sockSrvr.Accept( sockRecv );
// construct file object
CSocketFile file(&sockRecv);
// construct an archive
CArchive arIn(&file, CArchive::load);
/*or*/_CArchive arOut(&file, CArchive::store);
// use the archive to pass data
arIn >> dwValue;
/*or*/ arOut << dwValue;
(2)Client
// construct a socket
CSocket sockClient;
// create the SOCKET
sockClient.Create( );
// seek a connection
sockClient.Connect(strAddr, nPort);
// construct file object
CSocketFile file(&sockClient);
// construct an archive
CArchive arIn(&file, CArchive::load);
/*or*/_CArchive arOut(&file, CArchive::store);
// use the archive to pass data
arOut << dwValue;
/*or*/ arIn >> dwValue;
上 述 为 Client/Server 模 式 的 两 个 进 程, 用 于 完 成 两 个 进 程 间 一 个 数 据 变 量 的 通 信。 其 中, nPort 是Socket 的 端 口 号,strAddr 是 该 机 器 的IP 地 址( 如 202.197.1.3 或 FTP://RedAlert.com 等), 这 两 个 变 量 在Server 和Client 中 要 一 致。 当Server 进 程 运 行 至 Listen 后 便 处 于 睡 眠 状 态 直 到 Client 进 程 执 行 Connect 时 才 被 唤 醒, 而 后 两 个 进 程 便 开 始 传 输 数 据 了。
2、 利 用 CSocket 的 成 员 函 数 实 现
(1)Server
// Socket initial
if(!AfxSocketInit()){
MessageBox("WindowsSocket initial
failed!","Send",MB_ICONSTOP);
Return;
}
// Construct two socket
CSocket ChatSend,server;
// Creat a SOCKET
if(!ChatSend.Create(nPort)) // nPort=1025
MessageBox("SendSocket create failed!", "Send",MB_ICONSTOP);
else{
// Associates a local address with the socket ChatSend.Bind(nProt,strAddr);
// strAddr="202.196.111.1"
// Start Listening
ChatSend.Listen();
// Creat a new socket and accepts a connection on
//the socket
ChatSend.Accept(Server);
}
// Send a CString
Server.SendTo(csSendText,csCounts,nPort,strAddr);
// Close the two socket
Server.Close();
ChatSend.Close();
(2)Client
// Socket initial
if(!AfxSocketInit()){
MessageBox("WindowsSocket initial failed!", "Receive",MB_ICONSTOP);
return;
}
// Construct a socket
CSocket ChatRecieve;
// Creat a SOCKET
if(!ChatReceive.Create()){
MessageBox("ReceiveSocket create
failed!","Receive",MB_ICONSTOP);
return;
}
else{
// Establishes a connection