苏州大学实验报告 
院、系 文正学院 课程名称 指导教师 陆建德 
实 验 名 称 12物联网 年级专业 姓名 高成波 学号 1217443036 
 网络程序设计 成绩 
 同组实验者 无 实验日期 
 实验二 控制台方式Winsock数据报套接字广播通信  一. 实验内容(要求先完成题目,然后上机验证) 本实验利用Winsock API进行控制台方式下数据报套接字的广播通信程序设计。参照实验2讲义中的操作步骤,完成该程序的设计,并上机调试。要求可以实现本机与同一网络内其它主机之间的广播通信。  实验报告内容包括主要的实验代码、必要的注释或另外的说明文档以及实验结果与分析。   发送端: #include  #define  BUF_SZIE  64 #include \#pragma comment(lib, \ int main(int argc, char* argv[]) {    WSADATA        wsd;    //WSADATA变量  SOCKET         s;    //套接字  SOCKADDR_IN    servAddr;  //服务器地址  char   buf[BUF_SZIE]; //发送数据缓冲区    //初始化套结字动态库  if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)  {   printf(\  return 1;  }   //创建套接字  s = socket(AF_INET, SOCK_DGRAM, 0);  if (s == INVALID_SOCKET)  {   printf(\  WSACleanup();//释放套接字资源   return 1;  }    第1页,共5页 
教务处制 
     BOOL bBroadcast = true;  setsockopt(s, SOL_SOCKET, SO_BROADCAST,                                (char*)&bBroadcast, sizeof(BOOL));      ZeroMemory(buf, BUF_SZIE);      //服务器地址  servAddr.sin_family =AF_INET;  servAddr.sin_addr.s_addr = inet_addr(\ servAddr.sin_port = htons((short)5000);  int nServAddlen  = sizeof(servAddr);   SOCKADDR_IN bcast;  bcast.sin_addr.s_addr = INADDR_BROADCAST;    bcast.sin_family = AF_INET;  bcast.sin_port = htons((short)5000);         //发送数据     printf(\开始向网络中发送广播数据... \\n \\n\    char sz[] = \    while(TRUE)  {   sendto(s, sz, strlen(sz), 0, (sockaddr*)&bcast, sizeof(bcast));   Sleep(5000);  }   if(sendto(s, buf, BUF_SZIE, 0, (SOCKADDR*)&servAddr, nServAddlen) == SOCKET_ERROR)  {   printf(\  closesocket(s); //关闭套接字   WSACleanup(); //释放套接字资源   return 1;  }    closesocket(s);  //关闭套接字     WSACleanup();  //释放套接字资源  return 0; }     第2页,共5页 
教务处制 
接收端: #include  #define  BUF_SZIE  64 #include \#pragma comment(lib, \ int main(int argc, char* argv[]) {    WSADATA   wsd;   //WSADATA变量  SOCKET   s;    //套接字  SOCKADDR_IN  servAddr; //服务器地址  char   buf[BUF_SZIE]; //接收数据缓冲区    //初始化套结字动态库  if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)  {   printf(\  return 1;  }    //创建套接字  s = socket(AF_INET, SOCK_DGRAM, 0);  if (s == INVALID_SOCKET)  {   printf(\  WSACleanup();//释放套接字资源   return 1;  }    int nErrCode; //返回值  int nBufLen; //接收数据缓冲区大小  int nOptlen = sizeof(nBufLen);  //获取接收数据缓冲区大小  nErrCode = getsockopt(s, SOL_SOCKET, SO_RCVBUF,(char*)&nBufLen, &nOptlen);  if (SOCKET_ERROR == nErrCode)  {   //处理失败  }   //设置接收数据缓冲区为原来的10倍  nBufLen *= 10;  nErrCode = setsockopt(s, SOL_SOCKET, SO_RCVBUF,(char*)&nBufLen, nOptlen);  if (SOCKET_ERROR == nErrCode)  {  第3页,共5页 
教务处制