问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么向某个特定的IP和MAC地址发送数据包

发布网友 发布时间:2022-05-02 20:56

我来回答

1个回答

热心网友 时间:2022-06-26 11:41

  使用socket编程即可。
  1、网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
  2、下面用Socket实现一个windows下的c语言socket通信例子,这里客户端传递一个字符串,服务器端进行接收。
  【服务器端】
  #include “stdafx.h”
  #include <stdio.h>
  #include <winsock2.h>
  #include <winsock2.h>
  #define SERVER_PORT 5208 //侦听端口
  void main()
  {
  WORD wVersionRequested;
  WSADATA wsaData;
  int ret, nLeft, length;
  SOCKET sListen, sServer; //侦听套接字,连接套接字
  struct sockaddr_in saServer, saClient; //地址信息
  char *ptr;//用于遍历信息的指针
  //WinSock初始化
  wVersionRequested=MAKEWORD(2, 2); //希望使用的WinSock DLL 的版本
  ret=WSAStartup(wVersionRequested, &wsaData);
  if(ret!=0)
  {
  printf(“WSAStartup() failed!\n”);
  return;
  }
  //创建Socket,使用TCP协议
  sListen=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if (sListen == INVALID_SOCKET)
  {
  WSACleanup();
  printf(“socket() faild!\n”);
  return;
  }
  //构建本地地址信息
  saServer.sin_family = AF_INET; //地址家族
  saServer.sin_port = htons(SERVER_PORT); //注意转化为网络字节序
  saServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //使用INADDR_ANY 指示任意地址
  //绑定
  ret = bind(sListen, (struct sockaddr *)&saServer, sizeof(saServer));
  if (ret == SOCKET_ERROR)
  {
  printf(“bind() faild! code:%d\n”, WSAGetLastError());
  closesocket(sListen); //关闭套接字
  WSACleanup();
  return;
  }
  //侦听连接请求
  ret = listen(sListen, 5);
  if (ret == SOCKET_ERROR)
  {
  printf(“listen() faild! code:%d\n”, WSAGetLastError());
  closesocket(sListen); //关闭套接字
  return;
  }
  printf(“Waiting for client connecting!\n”);
  printf(“Tips: Ctrl+c to quit!\n”);
  //阻塞等待接受客户端连接
  while(1)//循环监听客户端,永远不停止,所以,在本项目中,我们没有心跳包。
  {
  length = sizeof(saClient);
  sServer = accept(sListen, (struct sockaddr *)&saClient, &length);
  if (sServer == INVALID_SOCKET)
  {
  printf(“accept() faild! code:%d\n”, WSAGetLastError());
  closesocket(sListen); //关闭套接字
  WSACleanup();
  return;
  }
  char receiveMessage[5000];
  nLeft = sizeof(receiveMessage);
  ptr = (char *)&receiveMessage;
  while(nLeft>0)
  {
  //接收数据
  ret = recv(sServer, ptr, 5000, 0);
  if (ret == SOCKET_ERROR)
  {
  printf(“recv() failed!\n”);
  return;
  }
  if (ret == 0) //客户端已经关闭连接
  {
  printf(“Client has closed the connection\n”);
  break;
  }
  nLeft -= ret;
  ptr += ret;
  }
  printf(“receive message:%s\n”, receiveMessage);//打印我们接收到的消息。
  }
  // closesocket(sListen);
  // closesocket(sServer);
  // WSACleanup();
  }
  【客户端】
  #include “stdafx.h”
  #include <stdio.h>
  #include <stdlib.h>
  #include <winsock2.h>
  #define SERVER_PORT 5208 //侦听端口
  void main()
  {
  WORD wVersionRequested;
  WSADATA wsaData;
  int ret;
  SOCKET sClient; //连接套接字
  struct sockaddr_in saServer; //地址信息
  char *ptr;
  BOOL fSuccess = TRUE;
  //WinSock初始化
  wVersionRequested = MAKEWORD(2, 2); //希望使用的WinSock DLL的版本
  ret = WSAStartup(wVersionRequested, &wsaData);
  if(ret!=0)
  {
  printf(“WSAStartup() failed!\n”);
  return;
  }
  //确认WinSock DLL支持版本2.2
  if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2)
  {
  WSACleanup();
  printf(“Invalid WinSock version!\n”);
  return;
  }
  //创建Socket,使用TCP协议
  sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if (sClient == INVALID_SOCKET)
  {
  WSACleanup();
  printf(“socket() failed!\n”);
  return;
  }
  //构建服务器地址信息
  saServer.sin_family = AF_INET; //地址家族
  saServer.sin_port = htons(SERVER_PORT); //注意转化为网络节序
  saServer.sin_addr.S_un.S_addr = inet_addr(“192.168.1.127”);
  //连接服务器
  ret = connect(sClient, (struct sockaddr *)&saServer, sizeof(saServer));
  if (ret == SOCKET_ERROR)
  {
  printf(“connect() failed!\n”);
  closesocket(sClient); //关闭套接字
  WSACleanup();
  return;
  }
  char sendMessage[]=“hello this is client message!”;
  ret = send (sClient, (char *)&sendMessage, sizeof(sendMessage), 0);
  if (ret == SOCKET_ERROR)
  {
  printf(“send() failed!\n”);
  }
  else
  printf(“client info has been sent!”);
  closesocket(sClient); //关闭套接字
  WSACleanup();
  }
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
步步高学习机@iboxH2 H2学习机的屏幕大小? 6-7万左右纯电 女生想买台便宜的小车在城市代步,有什么好推荐?电动车最好? 河南德盛智能环保科技有限公司怎么样? 深圳市德盛铭电科技有限公司怎么样? pvc防水门生产厂家哪个好呢? 晋江市德顺陶瓷建材有限公司简介 酒店家具厂家 梨子酿酒最简单的方法 如何利用命令提示符向其他IP发送信息(win7→未知系统)想问候一下,同网段的人。 怎样给知道他人IP(例如:202.96.168.174)同过什么软件经过这个IP可以发信息给他? 我家有一颗猕猴桃能结果吗 弥猴桃一年结几次果? 猕猴桃一棵能结吗 平均一棵狗枣猕猴桃能结多少果? 电流型集成电路温度传感器有哪些特性 光纤温度传感器有什么特性? 我现在买了一个温度传感器,主要想了解一下它的特性是什么? 温度传感器的特性是当温度升高时 温度传感器的特点? 分期乐说能取现3千会不会打电话到公司审核 您好!为什么微信设置标签分组后不给分组的人看,发朋友圈后他们还是 很久没下雨打一生肖 吊销怎么办理公司注销吊销转注销步骤 二话没说打一生肖 (不)字猜十二生肖之一? 前所未有打一生肖 万里无疆边处处找不到此物神岀鬼没打一生肖 没轻没重打一生肖? 如何解除web网页对active-x的阻止 win8系统,爬墙导致防火墙阻止web访问了怎么办?没有360。解决好立即采纳 NOD32的防火墙阻止了我的IE浏览器,打不开网页了!怎么办? 怎么解除被系统防火墙阻止的软件? 防火墙屏蔽了我的IE 要怎么设置? windows10系统,连不上网络是怎么回事? 显示以太网无internet, 请确保防火墙没有阻 linux防火墙,要求网关防火墙关闭转发功能,并且只实现内网主机可以访问web服务器 461请求被WEB防火墙拦截 怎么办 可以上QQ但是不能访问本地WEB服务器。是什么故障? 京东e卡,如果遇到京东拆分2个订单,在订单详情京东e卡金额怎么分配?在线等 万商卡跟京东E卡卡号跟密码都一样吗? 91手机助手最新版在安装软件时出现应用程序错误怎么办啊 怎么用最新版的91手机助手把以前备份的通讯录导入到手机里面。 谢谢 车漆上面的水印怎么去除 车子盖上车衣后出现水印。怎么解决?盖上车衣出现水印了,怎么解决? excel表的公式失灵了怎么办 算出来都等于0 91桌面最新版本如何隐藏桌面图标 车子盖上车衣后出现水印。怎么解决? 最新版的iphone91手机助手中添加cydia源怎么没有了 91手机助手 iphone版好用吗?