首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用于连接外部程序的NS-3插座

用于连接外部程序的NS-3插座
EN

Stack Overflow用户
提问于 2013-07-03 18:27:50
回答 1查看 1.4K关注 0票数 1

我正在尝试一种方法来编写一个套接字类来连接我的NS-3模拟到外部程序。因此,我要做的是在NS-3中创建数据包,并通过此套接字将它们发送到外部工具,在该工具中对数据包进行一些简单的操作,然后将其发送回NS-3。我不认为内置的NS-3插座可以用于此目的。

以前有没有人遇到过这样的事情,或者有什么建议?

非常感谢您的帮助!

EN

回答 1

Stack Overflow用户

发布于 2013-08-06 17:22:26

我正在使用一个TCP套接字来连接一个使用NS-3的外部Python TCP套接字,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 * Create a NS-3 Application that opens a TCP Socket and 
 * waits for incoming connections
 *
 */
#include "ns3/icmpv4.h"
#include "ns3/assert.h"
#include "ns3/log.h"
#include "ns3/ipv4-address.h"
#include "ns3/socket.h"
#include "ns3/integer.h"
#include "ns3/boolean.h"
#include "ns3/inet-socket-address.h"
#include "ns3/packet.h"
#include "ns3/trace-source-accessor.h"
#include "ns3/config.h"
#include "ns3/tos-device.h"
#include "ns3/names.h"
#include "ns3/string.h"
#include "ns3/object.h"


namespace ns3 {

IOProxyServer::IOProxyServer ()
{
    m_socket = 0;
}

TypeId IOProxyServer::GetTypeId (void)
{
  static TypeId tid = TypeId ("ns3::IoProxyServer")
    .SetParent<Application> ()
    .AddConstructor<IOProxyServer> ()
    .AddAttribute("RemotePortNumber",
                        "Remote port listening for connections",
                        IntegerValue(9999),
                        MakeIntegerAccessor(&IOProxyServer::m_remotePortNumber),
                        MakeIntegerChecker<int64_t>())
    .AddAttribute("RemoteIp",
                        "Remote IP listening for connections",
                        StringValue("127.0.0.1"),
                        MakeStringAccessor(&IOProxyServer::m_remoteIp),
                        MakeStringChecker())
    .AddAttribute("LocalPortNumber",
                        "Local port for incoming connections",
                        IntegerValue(3333),
                        MakeIntegerAccessor(&IOProxyServer::m_localPortNumber),
                        MakeIntegerChecker<int64_t>())
    .AddAttribute("LocalIp",
                        "Local IP for incoming connections",
                        StringValue("127.0.0.1"),
                        MakeStringAccessor(&IOProxyServer::m_localIp),
                        MakeStringChecker());
  return tid;
}


void IOProxyServer::StartApplication (void)
{
  NS_LOG_FUNCTION (this);

  m_socket = Socket::CreateSocket (GetNode (), TypeId::LookupByName ("ns3::TcpSocketFactory"));
  NS_ASSERT_MSG (m_socket != 0, "An error has happened when trying to create the socket");


  InetSocketAddress src = InetSocketAddress (Ipv4Address::GetAny(), m_localPortNumber );
  InetSocketAddress dest = InetSocketAddress(Ipv4Address(m_remoteIp.c_str()), m_remotePortNumber);

  int status;
  status = m_socket->Bind (src);
  NS_ASSERT_MSG (status != -1, "An error has happened when trying to bind to local end point");

  status = m_socket->Connect(dest);
  NS_ASSERT_MSG (status != -1, "An error has happened when trying to connect to remote end point");

  // Configures the callbacks for the different events related with the connection

  //m_socket->SetConnectCallback


  m_socket->SetAcceptCallback (
    MakeNullCallback<bool, Ptr<Socket>, const Address &> (),
    MakeCallback (&IOProxyServer::HandleAccept, this));

  m_socket->SetRecvCallback (
    MakeCallback (&IOProxyServer::HandleRead, this));

  m_socket->SetDataSentCallback (
    MakeCallback (&IOProxyServer::HandleSend,this));

  //m_socket->SetSendCallback

  m_socket->SetCloseCallbacks (
    MakeCallback (&IOProxyServer::HandlePeerClose, this),
    MakeCallback (&IOProxyServer::HandlePeerError, this));

  // If we need to configure a reception only socket or a sending only socket
  // we need to call one of the following methods:
  // m_socket->ShutdownSend();
  // m_socket->ShutdownRecv();
}

void IOProxyServer::StopApplication (void)
{
  NS_LOG_FUNCTION (this);
  m_socket->Close();
}

void IOProxyServer::HandlePeerClose (Ptr<Socket> socket)
{
  NS_LOG_FUNCTION (this << socket);
}

void IOProxyServer::HandlePeerError (Ptr<Socket> socket)
{
  NS_LOG_FUNCTION (this << socket);
}

void IOProxyServer::HandleSend (Ptr<Socket> socket, uint32_t dataSent)
{
  NS_LOG_FUNCTION (this << socket);
}

void IOProxyServer::HandleAccept (Ptr<Socket> s, const Address& from)
{
  NS_LOG_FUNCTION (this << s << from);
  s->SetRecvCallback (MakeCallback (&IOProxyServer::HandleRead, this));
}

void IOProxyServer::HandleRead (Ptr<Socket> socket)
{
  NS_LOG_FUNCTION (this << socket);
  Ptr<Packet> packet;

  while ((packet = socket->RecvFrom (from)))
    {
      if (packet->GetSize () == 0)
        { //EOF
          break;
        }

      if (InetSocketAddress::IsMatchingType (from))
        {
           //Do whatever you need with the incoming info 
        }

    }
}

void IOProxyServer::SendData()
{
    //Do whatever you need for creating your packet and send it using the socket

    //Ptr<Packet> packet = Create<Packet>(pointer, sizeof(pointer));
    //m_socket->Send(packet, 0, from);
}

IOProxyServer::~IOProxyServer ()
{

}

void IOProxyServer::DoDispose (void)
{
  NS_LOG_FUNCTION (this);
  m_socket = 0;
  Application::DoDispose ();
}

} // namespace ns3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17455570

复制
相关文章
当心外部连接中的ON子句
       在SQL tuning中,不良写法导致SQL执行效率比比皆是。最近的SQL tuning中一个外部连接写法不当导致过SQL执行时间超过15分钟左右此即 为一例。通过修正该SQL的写法之后,过高的逻辑读呈数量级下降以及SQL语句执行时间也大幅下降。下面给出一个列子来演示该情形。
Leshami
2018/08/14
2.1K0
SD-WAN:加强外部连接
SD-WAN设计的最初目的是取代多协议标签交换(MPLS)并将内部资源连接在一起。部署SD-WAN给项目带来了很多好处,但是同时也有一些限制。 SD-WAN厂商面临的真正挑战不仅仅是为了满足内部连接,广域网(WAN)必须支持一系列需要从多个位置进行网络访问的不同实体。
SDNLAB
2018/07/30
6130
SD-WAN:加强外部连接
Flink1.4 用于外部数据访问的异步IO
当与外部系统交互时(例如,使用存储在数据库中数据丰富流事件),需要注意与外部系统的通信延迟并不决定流应用程序的整体工作。访问外部数据库中的数据(例如在 MapFunction 中)通常意味着同步交互:将请求发送到数据库,MapFunction 会等待直到收到响应。在许多情况下,这个等待时间占了该函数绝大部分时间。
smartsi
2019/08/07
9350
docker 连接外部数据库_SpringBootVFS
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/15
2.2K0
Redis 使用连接命令用于连接 redis 服务
以下实例演示了客户端如何通过密码验证连接到 redis 服务,并检测服务是否在运行:
用户1685462
2021/08/30
3K0
Redis 用于连接 redis 服务的命令
以下实例演示了客户端如何通过密码验证连接到 redis 服务,并检测服务是否在运行:
用户9236362
2021/11/30
1K0
java 服务大量外部连接导至异常
相信很多小伙伴都碰到过一个问题,服务运行过程中,产生大量的未关闭的TCP链接,导至服务不可用直至服务异常。 该如何定位、排查这些未关闭的链接? 之前碰到过这个问题,解决了,今天有小伙伴又聊到这个问题,
潇洒
2023/10/20
2760
PHP实现执行外部程序的方法详解
在一些特殊情况下,会使用PHP调用外部程序执行,比如:调用shell命令、shell脚本、可执行程序等等,今天在源码中了解了一下PHP执行外部程序的方法,借此机会顺便整理一下。
用户8826052
2021/07/13
9910
Python运行外部程序的几种方法
ShellExecute(hwnd,op,file,params,dir,bShow) - hwnd:父窗口的句柄,若没有则为0 - op:要进行的操作,为open,print or 空 - file:要运行的程序或脚本 - params: 要向程序传递的参数,如果打开的是文件则为空 - dir:程序初始化的目录 - bShow:是否显示窗口
py3study
2020/01/10
9220
小程序中引入外部字体
刚刚在星球里写零基础教程时候,为了让他们更加熟悉视图层,给他们布置了一个小作业需要有引入外部字体这个需要,百度虽然挺多的,但我还是喜欢自己实践出的内容,简单写一下,下面是效果图:
许坏
2019/07/09
4.6K1
小程序中引入外部字体
Java魔法堂:调用外部程序
Java虽然五脏俱全但总有软肋,譬如获取CPU等硬件信息,当然我们可以通过JNI调用C/C++来获取,但对于对C/C++和Windows API不熟的码农是一系列复杂的学习和踩坑过程。那能不能通过简单一些、学习成本低一些的方式呢?答案是肯定的,在功能实现放在首位的情况下,借他山之石是最简洁有力的做法。
^_^肥仔John
2021/02/25
1.6K0
Java魔法堂:调用外部程序
java调用外部应用程序
最近因为需要做视频文件转换,在网上找了下,比较多的推荐是使用ffmpeg来实现,于是准备在java语言的基础上去实现,经过分析其实就是调用ffmpeg提供的应用命令去完成。
sucl
2019/08/07
3.6K1
java调用外部应用程序
小程序wxml使用外部函数
1.新建wxs文件,例如array_fun.wxs: 这里为判断元素在数组中是否存在,存在返回true否则为false var arr_fun = { array_index: function (search, array) { for (var i = 0; i < array.length; i++) { if (array[i] == search) { return true; }
薛定喵君
2019/11/06
9520
Java学习笔记 调用外部程序
本文介绍了如何通过Java调用外部程序,并给出了具体的代码示例。主要包括了使用ProcessBuilder类创建子进程、重定向输出流、获取输出结果以及处理输出结果等步骤。同时,还讨论了如何在命令行中传递参数以及处理输出结果等细节,对于常见的外部程序调用场景具有较广泛的应用价值。
乐百川
2018/01/08
1.9K0
C/C++ 打开外部程序
ShellExecute ShellExecute 在不使用管理员权限运行 VS2019 的情况下仍然可以正常打开任何程序,不报 740 错误。
微软技术分享
2022/12/28
6670
C/C++ 打开外部程序
用于监控USB设备连接事件的取证工具
usbrip(是“USB Ripper”的简写,而不是“USB R.I.P.”)是一个带有CLI接口的开源取证工具,可用于跟踪/监控Linux机器上的USB设备连接事件(即USB事件历史记录,“已连接”和“已断开连接”事件)。
FB客服
2019/08/28
2.3K0
用于监控USB设备连接事件的取证工具
如何利用Vbs 运行外部程序
1、Scripting.FileSystemObject —> 提供一整套文件系统操作函数
明明如月学长
2021/08/27
1.5K0
VC 调用外部程序接口
  返回值     =-1:出现错误     =0:调用成功但是没有出现子进程     >0:成功退出的子进程的id
阳光岛主
2019/02/19
1.2K0
ns-3构建简单点对点网络
ns全称是network simulator,从上个世纪发展到现在,一共有三个版本,其中ns2是ns1的改进版本,把ns1中的脚本tcl改进成具有面向对象特性的otcl脚本,在ns2中,开发者需要同时使用c++和otcl来编写仿真场景。而ns3与ns2关系并不大,虽然同是使用c++开发的,但是ns3摈弃了otcl的使用,开发者只需要使用c++就可写出自己的仿真场景,然而由于ns3是2006才开始开发的,所以有些ns2的模块并没有在ns3中继承,但是ns3也有ns2没有的新时代的模块,例如wimax,lte。
forrestlin
2018/05/23
2.7K0
点击加载更多

相似问题

插座连接

12

多插座连接

13

通过连接的插座

11

蓝牙插座连接

13

与插座的连接

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文