資源描述:
《Socket兩臺(tái)主機(jī)通信》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、實(shí)驗(yàn)一WINSOCKET編程一、實(shí)驗(yàn)?zāi)康耐ㄟ^使用SocketAPI,加深對(duì)TCP和UDPSocket的認(rèn)識(shí)。二、實(shí)驗(yàn)要求兩位同學(xué)一組,共同完成服務(wù)器與客戶端程序編寫。甲同學(xué)通過tcp連接到乙同學(xué)服務(wù)器(ip:*.*.*.*,端口號(hào):8888)。甲發(fā)送自己的學(xué)號(hào)和姓名到乙服務(wù)器,乙服務(wù)器返回一個(gè)自己的學(xué)號(hào)和姓名給甲。然后甲通過UDP提交獲取到的學(xué)號(hào)和姓名給乙,如果乙收到正確的信息,則返回的信息為:恭喜,實(shí)驗(yàn)成功!!若收到信息不對(duì),則返回的信息為:錯(cuò)誤認(rèn)證,實(shí)驗(yàn)沒有成功!三、實(shí)驗(yàn)步驟1.甲同學(xué)通過TCP連接乙同學(xué)服務(wù)器ip:*.*.*.*端口號(hào):88882.使用TCP發(fā)送自己的學(xué)號(hào)
2、和姓名到服務(wù)器(姓名用漢語拼音)。3.乙同學(xué)TCP服務(wù)器返回一個(gè)自己的學(xué)號(hào)和姓名給甲,客戶端可以使用如下方法來獲取。/*********************************************#define_MagicNumberT0xFFFE3141//tcp標(biāo)識(shí)#define_MagicNumberU0xFFEF3141//udp標(biāo)識(shí)#define_ID_Len32#define_NAME_Len256typedefstructPacket{DWORDmagicnum;unsignedcharID[_ID_Len];//學(xué)號(hào)unsignedcharName[
3、_NAME_Len];//姓名}package;packagerecvBuffer;send(TCPSocket,(char*)&sendBuffer,sizeof(_A1_Packet),0);//發(fā)送TCP請(qǐng)求包recv(TCPSocket,(char*)&recvBuffer,sizeof(_A1_Packet),0);//接收TCP服務(wù)器端的回應(yīng)puts((char*)recvBuffer.PostData);***************************************************/4.甲通過UDP連接服務(wù)器乙,將上面接收到的學(xué)號(hào)和姓名,發(fā)
4、送給UDP服務(wù)器乙。使用sendto()發(fā)送到服務(wù)器使用recvfrom()等待服務(wù)器的返回信息5.UDP服務(wù)器的返回信息存放在PostData[]中。客服端通過如下方法來查看UDP服務(wù)器返回的信息:puts((char*)recvBuffer.PostData);若兩次學(xué)號(hào)與姓名一樣,則返回的信息為:恭喜,實(shí)驗(yàn)成功??!若兩次學(xué)號(hào)與姓名不一樣,則返回的信息為:兩次字符串不一樣,實(shí)驗(yàn)沒有成功!實(shí)驗(yàn)截圖:首先開啟服務(wù)器端:再開啟客戶端:服務(wù)器端顯示:源代碼:客戶端代碼:Client.cpp#include#include#include5、io.h>#include#define_MagicNumberT0xFFFE3141//TCP數(shù)據(jù)包頭部標(biāo)識(shí)符#define_MagicNumberU0xFFEF3141//UDP數(shù)據(jù)包頭部標(biāo)識(shí)符#define_SNDID_Len32//學(xué)號(hào)長度#define_PostData_Len256//最大數(shù)據(jù)長度#pragmacomment(lib,"ws2_32.lib")#pragmacomment(linker,"/subsystem:console")typedefstruct{DWORDmagicnum;charSNSID[_SNDID_Len];
6、//學(xué)號(hào)字段,長度32charPostData[_PostData_Len];//數(shù)據(jù)字段,長度256}_A1_Packet;voidmain(){//InitializeWinsock//初始化WSADATAwsaData;interrorCode;intiResult=WSAStartup(MAKEWORD(2,2),&wsaData);if(iResult!=0){printf("初始化套接字失敗");return;}//建立socketSOCKETTCPSocket;TCPSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
7、//創(chuàng)建TCP套接字//設(shè)置Server端IP和端口:(TCP/UDP相同)if(TCPSocket==INVALID_SOCKET){printf("創(chuàng)建套接字失敗");closesocket(TCPSocket);WSACleanup();return;}//綁socketSOCKADDR_INserver;server.sin_family=AF_INET;server.sin_port=htons(8888);server.sin_addr.s_addr=inet_addr("1