欢迎来到天天文库
浏览记录
ID:37712824
大小:249.50 KB
页数:10页
时间:2019-05-29
《Socket两台主机通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验一WINSOCKET编程一、实验目的通过使用SocketAPI,加深对TCP和UDPSocket的认识。二、实验要求两位同学一组,共同完成服务器与客户端程序编写。甲同学通过tcp连接到乙同学服务器(ip:*.*.*.*,端口号:8888)。甲发送自己的学号和姓名到乙服务器,乙服务器返回一个自己的学号和姓名给甲。然后甲通过UDP提交获取到的学号和姓名给乙,如果乙收到正确的信息,则返回的信息为:恭喜,实验成功!!若收到信息不对,则返回的信息为:错误认证,实验没有成功!三、实验步骤1.甲同学通过TCP连接乙同学服务器ip:*.*.*.*端口号:88882.使用TCP发送自己的学号
2、和姓名到服务器(姓名用汉语拼音)。3.乙同学TCP服务器返回一个自己的学号和姓名给甲,客户端可以使用如下方法来获取。/*********************************************#define_MagicNumberT0xFFFE3141//tcp标识#define_MagicNumberU0xFFEF3141//udp标识#define_ID_Len32#define_NAME_Len256typedefstructPacket{DWORDmagicnum;unsignedcharID[_ID_Len];//学号unsignedcharName[
3、_NAME_Len];//姓名}package;packagerecvBuffer;send(TCPSocket,(char*)&sendBuffer,sizeof(_A1_Packet),0);//发送TCP请求包recv(TCPSocket,(char*)&recvBuffer,sizeof(_A1_Packet),0);//接收TCP服务器端的回应puts((char*)recvBuffer.PostData);***************************************************/4.甲通过UDP连接服务器乙,将上面接收到的学号和姓名,发
4、送给UDP服务器乙。使用sendto()发送到服务器使用recvfrom()等待服务器的返回信息5.UDP服务器的返回信息存放在PostData[]中。客服端通过如下方法来查看UDP服务器返回的信息:puts((char*)recvBuffer.PostData);若两次学号与姓名一样,则返回的信息为:恭喜,实验成功!!若两次学号与姓名不一样,则返回的信息为:两次字符串不一样,实验没有成功!实验截图:首先开启服务器端:再开启客户端:服务器端显示:源代码:客户端代码:Client.cpp#include#include#include5、io.h>#include#define_MagicNumberT0xFFFE3141//TCP数据包头部标识符#define_MagicNumberU0xFFEF3141//UDP数据包头部标识符#define_SNDID_Len32//学号长度#define_PostData_Len256//最大数据长度#pragmacomment(lib,"ws2_32.lib")#pragmacomment(linker,"/subsystem:console")typedefstruct{DWORDmagicnum;charSNSID[_SNDID_Len];6、//学号字段,长度32charPostData[_PostData_Len];//数据字段,长度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、//创建TCP套接字//设置Server端IP和端口:(TCP/UDP相同)if(TCPSocket==INVALID_SOCKET){printf("创建套接字失败");closesocket(TCPSocket);WSACleanup();return;}//绑socketSOCKADDR_INserver;server.sin_family=AF_INET;server.sin_port=htons(8888);server.sin_addr.s_addr=inet_addr("1
5、io.h>#include#define_MagicNumberT0xFFFE3141//TCP数据包头部标识符#define_MagicNumberU0xFFEF3141//UDP数据包头部标识符#define_SNDID_Len32//学号长度#define_PostData_Len256//最大数据长度#pragmacomment(lib,"ws2_32.lib")#pragmacomment(linker,"/subsystem:console")typedefstruct{DWORDmagicnum;charSNSID[_SNDID_Len];
6、//学号字段,长度32charPostData[_PostData_Len];//数据字段,长度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、//创建TCP套接字//设置Server端IP和端口:(TCP/UDP相同)if(TCPSocket==INVALID_SOCKET){printf("创建套接字失败");closesocket(TCPSocket);WSACleanup();return;}//绑socketSOCKADDR_INserver;server.sin_family=AF_INET;server.sin_port=htons(8888);server.sin_addr.s_addr=inet_addr("1
此文档下载收益归作者所有