在PHP中接收UDP包数据报
我正在PHP工作,为GPS跟踪系统构建听力服务器. GPS通过UDP数据包发送数据,我可以通过运行下面的脚本来显示.但是,实际数据出现在符号中,所以我猜我缺少转换 //Reduce errors error_reporting(~E_WARNING); //Create a UDP socket if(!($sock = socket_create(AF_INET, SOCK_DGRAM, 0))) { $errorcode = socket_last_error(); $errormsg = socket_strerror($errorcode); die("Couldn't create socket: [$errorcode] $errormsg \n"); } echo "Socket created \n"; // Bind the source add
0 2023-05-30
编程技术问答社区
Java客户端PHP服务器UDP打孔示例代码
我正在研究一个需要EA P2P服务器的项目,但是我还没有找到任何Java-Client PHP-Server示例代码.我了解UDP孔打孔的工作原理的概念,但我无法在代码中使用任何东西. 我尝试了什么: thesocket.java public class TheSocket { public static String response = "hello"; public static String request; public static String webServerAddress; public static ServerSocket s; protected static ServerSocket getServerSocket(int port)throws Exception{ return new ServerSocket(port); } public static void handleRequest(Socket s){
0 2023-05-29
编程技术问答社区
socket_create vs. fsockopen php
我当前使用的托管服务不允许我使用插座,这可能是有充分理由的.但是,他们确实让我使用 fsockopen .我想知道有什么区别,因为某些脚本与 socket_create 甚至 stream_socket_server ,请勿与 fsockopen 一起使用.也就是说,如果 fsockopen 应该有效,则我的代码在下面列出.它的作用是在其自己的IP地址上聆听传入的UDP数据包并读取它们. 谢谢 $sock = fsockopen("udp://x.x.x.x", $port); while(1) { $buf = fread($sock, 200); flush(); ob_flush(); } 解决方案 fsockopen 创建与主机的连接,不是听力插座. fsockopen($ address)〜== socket_connect ((( socket_create (),$ dorady) ) 您的托管提供商不希望您在替代端口
0 2023-05-27
编程技术问答社区
我怎样才能在Perl中接受多个TCP连接?
我对Linux的Perl脚本有问题.它的主要目的是在3个应用程序之间成为中间人.它应该做什么: 它应该能够在$udp_port 上等待UDP文本(无空格) 当它收到UDP文本时,它应该将其转发给连接的TCP客户端 问题是我的应用当前工作直到我第一次与TCP客户端断开连接为止.然后,我将无法再连接到它,并且它在$udp_port上接收下一个UDP数据包后就淘汰了.因此,基本上,每当我想与TCP重新连接时,我都必须重新启动应用程序. 所有这些都应尽可能快(每毫秒计数).发送到UDP或TCP的文本不包含空格.不必一次支持多个TCP客户端,但这肯定是优势: - ) 这是我当前的代码: #!/usr/bin/perl use strict; use warnings; use IO::Socket; use Net::hostent; use threads; use threads::shared; my $tcp_port = "10008"; # con
0 2023-05-24
编程技术问答社区
在一个非常大的区域模拟中对同行的数量进行合格的估计?
这个问题适用于指示/Hunch .我意识到它可能以前已经讨论过,并且没有好的科学答案.尽管如此,我仍在寻求经验丰富/合格的意见,因为没有确定的答案.迹象表明作为线索很有价值,因此我要求社区允许一些模糊性. 背景: 考虑非常大的区域3D模拟 与n个参与者(同龄人,NAT背后的人)分发在多个城市. 在模拟中将每个参与者视为一个"移动对象"的地方(因此,每个移动对象都由对等式所有). 每个同行正确地看到所有其他移动对象的地方(即需要位置更新). (整个模拟都更大,因此我们现在专注于一个单个斑点,并将其视为整个"世界"). 比例: 世界/斑点大小10x10公里(几乎平坦). 对象大小:长度最大10米 (我们省略了诸如遮挡,选择,平衡等.假设所有需要看到和更新). "移动对象"的性质: 它在身体/位置上不安(与大船相比 波). 它的动作必须与所有同行同步(但是单独的同步不需要与其他同步同步). 如果X看到了一个,但不拥有它,它的行为会
2 2023-05-24
编程技术问答社区
windows server 2008上UDP性能的上限
从我的测试中,我在10GB网络上击中了性能墙.我似乎每秒无法阅读超过180-200k的数据包.查看perfmon或任务管理器,如果不是更多,我可以收到多达一百万个数据包/秒.测试1个插座或10或100,似乎不会更改此限制的每秒200-300K数据包.我已经摆弄了RSS等,没有成功.单播和多播似乎并不重要,重叠的I/O VS同步也不会有所作为.数据包的大小也不重要.窗口可以从NIC复制到缓冲区的数据包数量似乎有一个困难的限制.这是戴尔R410.有任何想法吗? #include "stdafx.h" #include #include static inline void fillAddr(const char* const address, unsigned short port, sockaddr_in &addr) { memset( &addr, 0, sizeof( addr ) ); addr.sin_
2 2023-05-24
编程技术问答社区
用python接收高速率的UDP数据包
我正在与Python合作,以便从FPGA接收一个UDP数据包,试图丢失尽可能少的数据包. 数据包率从大约5kHz到一些MHz,我们想在特定的时间窗口(代码中的ACQ_TIME)中获取数据. 我们现在有此代码: BUFSIZE=4096 dataSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) dataSock.settimeout(0.1) dataSock.bind((self.HOST_IP, self.HOST_PORT)) time0=time.time() data_list = [] while time.time()-time0
0 2023-05-24
编程技术问答社区
UDP "连接"--C#中的速度
我介绍了一些样板UDP代码,速度非常适合发送一些少量数据(这是我的意图). ,与"发送"方法相比,"连接"方法"非常慢". 这需要50-80毫秒: udpClient = new UdpClient(); udpClient.Connect("HOSTNAME", 11000); 发送几乎不会由1 ms进行介绍,因为它如此之快: Byte[] sendBytes = Encoding.ASCII.GetBytes("Is anybody there?"); udpClient.Send(sendBytes, sendBytes.Length); 我想知道这种"连接"方法是什么,因为UDP是通过设计无连接的. 如果我忽略了连接方法,则每个呼叫的发送速度较慢: udpClient.Send(sendBytes, sendBytes.Length,"HOSTNAME",1100); 有机会提高"连接"速度? 免责声明:我知道UDP是不可靠的,但是对于我
2 2023-05-23
编程技术问答社区
在UDP中使用IOCP?
我非常熟悉 输入/输出完成端口 是 tcp . 但是,如果我是在编码FPS游戏或对低潜伏期需求的任何东西都可能是一个破坏交易的人 - 我希望立即对玩家提供最佳的比赛体验,即使以失去一些空间的代价,有关的数据.很明显,我应该使用 udp ,除了经常发送坐标更新外,我还应该实现一种半可靠的协议(AFAIK TCP会导致UDP中的数据包丢失,以便我们避免将这两个混合使用)到处理此类事件,例如聊天消息或数据包丢失可能至关重要的枪声. 假设我的目标是适用于MMOFPS游戏的性能,该游戏允许一个人与数百名玩家见面,持久世界,除了用枪支战斗之外,它允许他们通过聊天消息进行交流等 - 类似这实际上存在并且运行良好 - 查看Planetside2. 网上的许多文章(例如来自MSDN的这些文章)说,重叠的插座是最好的,而IOCP是神层的概念,但它们似乎并没有区分我们使用其他协议以外的其他方案. 因此,在开发此类服务器时几乎没有使用I/O技术的可靠信息,我已经查看了 this ,但是这个主
6 2023-05-23
编程技术问答社区
TeamViewer怎么这么快?
抱歉,这是必要的. 简介 我正在为Windows Vista/7开发C#4.0中的远程桌面软件(只是为了娱乐).我已经遇到了基本障碍:我有一个强大的UDP消息传递系统,相对干净的程序设计,我有一个镜子驱动程序(来自Demoforge的免费DFMirage Mirror驱动程序),并且我已经实现了所有人的NAT遍历NAT类型除了对称NAT(在公司防火墙情况下). 关于屏幕传输/共享,多亏了《镜子驱动程序》,我会自动通知屏幕区域,我可以简单地将镜子驱动程序不断变化的屏幕映射到我自己的位图.然后,我将屏幕区域作为PNG压缩,并将其从服务器发送到我的客户端.事情看起来还不错,但还不够快.它和VNC一样慢(顺便说一句,我不使用VNC协议,只是一个自定义业余协议). 从最慢的远程桌面软件到最快,列表通常在所有类似VNC的实现中开始,然后爬到Microsoft Windows Windows远程桌面...然后... TeamViewer.关于Crossloop,LogMein不
2 2023-05-23
编程技术问答社区
WebSockets、UDP和基准
HTML5 Websockets当前使用TCP通信的形式.但是,对于实时游戏,TCP不会削减它(这是使用其他平台(例如本机)的好理由).由于我可能需要UDP继续一个项目,因此我想知道HTML6的规格是否支持UDP? 另外,Webockets是否有可靠的基准测试,可以将WS协议与低级,直接套接字协议进行比较? ? 解决方案 在LAN上,您可以通过200 microSec的Websocket(从浏览器JS到WebSocket Server and Back)获得消息的往返时间,这与RAW ICMP PINGS相似.关于人,大约10毫秒,WAN(在同一国家/地区的服务器上过时的ADSL)约30毫秒,依此类推,依此类推,可通过3.5g约120-200ms.关键是:基于网络,Websocket的确没有为您所获得的延迟添加. . Websocket的电线电平(与原始TCP相比)为2个八位位(未掩盖的有效载荷 64K)分散成多个Websoket帧).非常低. 有关WebSoc
4 2023-05-23
编程技术问答社区
isc-dhcp-server在openstack'的实例中不工作,但在vmware中工作。
通过tcpdump在dhcp-server中,它显示 server 可以接收DHCPDISCOVER软件包并发送DHCPOFFER软件包,但无法从dhcp-client,因此客户端无法获得IP地址,并且始终在send DHCPDISCOVER软件包中. 但是,在 vmware 的实例中运行的dhcp-server可以将DHCPACK发送到 client ,而相同的 client 将获得IP成功. dhcp-server使用与 OpenStack 的实例相同的配置. ,如果我在 client 实例中配置静态IP地址,它将ping dhcp-server的IP成功. 另外一件事, server 和客户端在同一vlan中. Openstack的实例中是否有任何限制规则?我该如何解决这个问题, 解决方案 基本原因是port的traffic受openstack中的security groups限制. 拒绝出口DHCP和DHCPV6响应,以防止实例充当DHCP(
0 2023-05-23
编程技术问答社区
Java中的UDP线程无限循环
我写了两个程序.现在,每个程序都使用线程同时发送和接收数据包. 每当我将数据包从服务器发送到客户端时,客户端处的消息就会以无限循环接收. IE;我添加了一个打印语句,该语句打印了发送的消息,这将永远存在于无限循环中.我想做到这一点,以便它收到消息,然后能够在用户愿意的情况下回到服务器并退出. 我已经尝试使用socket.close(),但是这使得客户端接收消息,我只能回到服务器中一次.发送后,我无法再发送了.我想做到这一点,以便我可以不止一次写回来. 任何人都可以向我指出正确的方向吗? 我的代码如下; public class UDPThreadClient extends Thread { public static int port1; //Create threaded server UDPThreadClient (int port1) { System.out.println ("Starting threaded client");
12 2023-05-22
编程技术问答社区
pcap_open_dead来模拟完整的UDP数据包捕获
跟进我的问题关于PCAP文件的创建,我现在想模拟该公司节省完整的UDP数据包,包括以太网,IP和UDP标头. 我应该使用哪种DLT_XXX类型?我相信pcap_dump() 解决方案 如果要模拟完整的UDP-over-over-eeternet数据包,则需要DLT_EN10MB(名称中的" 10MB"是历史性的; DLT_EN10MB确实是指"所有类型的以太网"). (DLT_RAW适用于最低级别标题为IP的数据包;它不会跳过以太网标头,这意味着您不必提供以太网标头,实际上,它要求它您不提供一个 - 如果您 do 提供一个,则将其写入文件,这会使读取文件的程序感到困惑,因为他们会期望从IPv4或IPv6标头开始的数据包,而不是以太网标题.)
2 2023-05-21
编程技术问答社区
创建一个 pcap 文件
我需要将UDP数据包保存到文件中,并希望使用PCAP格式重复使用可用的各种工具(Wireshark,TCPDUMP,...). 这个线程写入全局文件标头" struct pcap_file_header". pcap_t* pd = pcap_open_dead(DLT_RAW, 65535); pcap_dumper_t* pdumper = pcap_dump_open(pd, filename); struct pcap_file_header file_hdr; file_hdr.magic_number = 0xa1b2c3d4; file_hdr.version_major = 2; file_hdr.version_minor = 4; file_hdr.thiszone = 0; file_hdr.sigfigs = 0; file_hdr.snaplen = 65535; file_hdr.linktype = 1; // How do I write fil
2 2023-05-21
编程技术问答社区
在Java中把DatagramPacket转换为字节数组后解析它
我正在尝试解析我将在插座上收到的数据工具包.我知道我将收到的数据包的格式,这是DHCPREQUEST数据包,但我认为这并不重要.为简单起见,让我们考虑前六个字段: 第一个字段是" opcode",即1个字节. 第二字段是"硬件类型",即1个字节. 第三,"硬件地址长度",1个字节. 第四,"啤酒",1个字节. 第五,"交易标识符XID",4个字节. 第六,"秒",2个字节. 收到数据包后,我的方法是将其转换为字节数组. DatagramPacket request = new DatagramPacket(new byte[1024], 1024); socket.receive(request); byte[] buf = request.getData(); 此时,数据包存储在字节数组buf中,作为一系列字节.既然我知道这个字节序列的结构是什么,我该如何解析?单字节足够简单,但是多位字段呢?例如,如何提取字节4至7,然后将它们存储在名为xid的变量中?
8 2023-05-20
编程技术问答社区
在python中移除UDP数据包中的填充物(Linux)
我正在尝试从Linux计算机发送的UDP数据包中删除空填充.目前,它将数据包的大小粘贴到 60字节 . 我正在使用AF_PACKET和SOCK_RAW构建一个原始插座.我创建了从以太网框架标头,IP标头(我指定小于60的数据包)和UDP数据包本身的所有内容. 我通过本地网络发送,Wireshark中观察到的数据包的空填充. 关于如何克服这个问题的任何建议? 解决方案 如果不与Linux驱动程序一起玩,这几乎是不可能的.这不是最好的答案,但它应该指导其他任何希望朝着正确方向执行此操作的人.3 类型 sudo ethtool -d eth0 查看驱动程序是否已启用了垫子短包.
2 2023-05-16
编程技术问答社区
UDP可靠数据服务的实现
我正在尝试使用UDP实现简单的数据传输.我有一个校验和的问题,给定一个包含数据的数据包,我应该如何实现校验和?还有任何想法如何实施超时,以便它会触发重新启动?谢谢 解决方案 为什么不尝试可靠的UDP,请参阅 reliable_user_datagram_protocol 它具有标准. 其他解决方案 here's one approach for the internet checksum unsigned short checkSum() { unsigned long sum = 0; int i; for(i=0; i > 16) { sum = (sum & 0xFFFF) + (sum >> 16); }
0 2023-05-16
编程技术问答社区
recvfrom只收到几个数据包,之后它就进入等待状态。
嗨,我是套接字编程中的新手,并尝试使用我的C ++应用程序中的相机和客户端创建客户端服务器应用程序. 当我看到计算机和相机之间的数据包传输时,它表明相机在此之后发送了超过150000个数据包.但是,当我收到我能够在一次之后收到400 - 450 packets recvfrom函数将进入等待状态时.如果我再次运行该EXE文件而不停止前一个文件,它再次接收400-450 packets. 接收数据包的代码 SOCKET out1 = socket(AF_INET, SOCK_RAW, IPPROTO_UDP); if (out1 == INVALID_SOCKET) { cout
4 2023-05-16
编程技术问答社区
具有多个发送方和一个单一接收方的UDP
在一个项目中,我有多个UDP数据发件人,但只有一个接收器. 如果流量越高,接收器会"忘记"很多数据包.我知道这是UDP固有的问题,但我想最大程度地减少丢失的数据包的数量. 我读过 this 这是我的代码(请原谅大规模的代码块,但我希望示例是自由包含的) 发件人侧: public class UdpSender { private static int portNumber = 15000; public void Send(string data) { var udpServer = new UdpClient(); var ipEndPoint = new IPEndPoint(IPAddress.Broadcast, portNumber); byte[] bytes = Encoding.ASCII.GetBytes(data); udpServer.Send(byt
2 2023-05-16
编程技术问答社区