Socket編程利用TCP協(xié)議的實(shí)驗(yàn)報告_第1頁
Socket編程利用TCP協(xié)議的實(shí)驗(yàn)報告_第2頁
Socket編程利用TCP協(xié)議的實(shí)驗(yàn)報告_第3頁
Socket編程利用TCP協(xié)議的實(shí)驗(yàn)報告_第4頁
Socket編程利用TCP協(xié)議的實(shí)驗(yàn)報告_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、. Socket編程報告TCP/IP協(xié)議實(shí)驗(yàn)?zāi)康耐ㄟ^C+來實(shí)現(xiàn)TCP/IP協(xié)議下的Socket編程,掌握TCP協(xié)議的算法實(shí)現(xiàn)。實(shí)驗(yàn)原理客戶端 建立Socket,通過端口號和地址確定目標(biāo)效勞器,使用Connect連接到效勞器,send發(fā)送消息,等待處理,通信完成后調(diào)用CloseSocket關(guān)閉Socket效勞端 建立Socket,聲明自身的端口號和地址并綁定到Socket,使用Listen翻開監(jiān)聽,然后不斷用Accept去查看是否有連接,如果有,捕獲Socket,并通過Recv獲取消息的容,通信完成后調(diào)用CloseSocket關(guān)閉這個對應(yīng)Accept到的Socket,如果不再需要等待任何客戶端連

2、接,則用CloseSocket關(guān)閉掉自身的Socket實(shí)驗(yàn)代碼C+實(shí)現(xiàn)效勞器端代碼如下:#pragma once#include #include #pragma ment (lib,ws2_32.lib)class CServerNetpublic: /初始化效勞器,返回0表示成功int Init(const char* address,int port); /更新數(shù)據(jù)void Run();private:SOCKET m_sock;int CServerNet:Init( const char* address,int port )int rlt = 0; /用于記錄錯誤信息,并輸出int

3、 iErrorMsg; /初始化WinSockWSAData wsaData;iErrorMsg = WSAStartup(MAKEWORD(1,1),&wsaData);if (iErrorMsg != NO_ERROR)/初始化WinSock失敗printf(wsastartup failed with error : %dn,iErrorMsg); rlt = 1;return rlt;/創(chuàng)立效勞端Socketm_sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if (m_sock = INVALID_SOCKET) /創(chuàng)立Socket異常p

4、rintf(socket failed with error : %dn,WSAGetLastError(); rlt = 2;return rlt;/聲明信息sockaddr_in serverAddr;serverAddr.sin_family = AF_INET;serverAddr.sin_port = port;serverAddr.sin_addr.s_addr = inet_addr(address);/綁定iErrorMsg = bind(m_sock,(sockaddr*)&serverAddr,sizeof(serverAddr);if (iErrorMsg 0)/綁定失敗

5、printf(bind failed with error : %dn,iErrorMsg);rlt = 3;return rlt; return rlt;void CServerNet:Run()/公開連接listen(m_sock,5);sockaddr_in tcpAddr;int len = sizeof(sockaddr);SOCKET newSocket;char buf1024;int rval;do/接收信息newSocket = accept(m_sock,(sockaddr*)&tcpAddr,&len); if (newSocket = INVALID_SOCKET)/非

6、可用socket else/新socket連接 printf(new socket connect : %dn,newSocket); /消息處理doprintf(processn);/接收數(shù)據(jù)memset(buf,0,sizeof(buf);rval = recv(newSocket,buf,1024,0);if (rval = SOCKET_ERROR)/這應(yīng)該是個異常,當(dāng)客戶端沒有調(diào)用closeSocket就直接退出游戲的時候,將會進(jìn)入這里printf(recv socket errorn); if (rval = 0)/recv返回0表示正常退出printf(ending connec

7、tion);else/顯示接收到的數(shù)據(jù)printf(recv %sn,buf);while(rval != 0);/關(guān)閉對應(yīng)Accept的socketclosesocket(newSocket); while (1);/關(guān)閉自身的Socketclosesocket(m_sock);int main(int argc, char *argv)CServerNet serverNet;int iRlt = serverNet.Init(,8888);if (iRlt = 0)printf(init ok.n);serverNet.Run();elseprintf(serverNet init fa

8、iled with error : %dn,iRlt);system(pause);客戶端代碼如下:#pragma once#include #include#pragma ment(lib, Ws2_32.lib)class CClientNetpublic:/連接上指定效勞器int Connect(int port,const char* address);/發(fā)送信息int SendMsg(const char* msg,int len);/關(guān)閉void Close();private:SOCKET m_sock;int CClientNet:Connect( int port,const

9、 char* address )int rlt = 0;/用于記錄錯誤信息并輸出int iErrMsg;/啟動WinSockWSAData wsaData;iErrMsg = WSAStartup(MAKEWORD(1,1),&wsaData);if (iErrMsg != NO_ERROR)/有錯誤printf(failed with wsaStartup error : %dn,iErrMsg);rlt = 1;return rlt;/創(chuàng)立Socketm_sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if (m_sock = INVALID_

10、SOCKET)/創(chuàng)立Socket失敗printf(socket failed with error : %dn,WSAGetLastError();rlt = 2;return rlt;/目標(biāo)效勞器數(shù)據(jù)sockaddr_in sockaddrServer;sockaddrServer.sin_family = AF_INET;sockaddrServer.sin_port = port;sockaddrServer.sin_addr.s_addr = inet_addr(address);/連接,sock與目標(biāo)效勞器連接iErrMsg = connect(m_sock,(sockaddr*)&

11、sockaddrServer,sizeof(sockaddrServer);if (iErrMsg 0)printf(connect failed with error : %dn,iErrMsg);rlt = 3;return rlt;return rlt;int CClientNet:SendMsg(const char* msg,int len)int rlt = 0;int iErrMsg = 0;/發(fā)送消息,指定sock發(fā)送消息iErrMsg = send(m_sock,msg,len,0);if (iErrMsg 0)/發(fā)送失敗printf(send msg failed with error : %dn,iErrMsg);rlt = 1;return rlt;return rlt;void CClientNet:Close()closesocket(m_sock);int main()CClientNet client;/連接到即本地,端口號為8888的效勞端printf(Connectn);client.Connect(8888,);/發(fā)送消息printf(send msgn);client.SendMsg(hello0,sizeof(hell

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論