草庐IT

c++ - TCP 库正在捆绑消息?

我正在使用一个带有名为Lacewing的服务器和客户端类的TCP库http://lacewing-project.org/我注意到,当我向客户端发送多个单独的消息时,它有时会将它们捆绑在一起,而我可以将它们分开的唯一方法是再次解析它们。发送二进制数据时,虽然很难解析。有谁知道它为什么会这样做?我在客户端和服务器上都尝试了DisableNagling(),但它仍然可以。这是我可能会发送的内容的示例:voidServerCore::loginRequestC(conststd::string&userName,conststd::string&password){std::coutTag;

c - 是否可以读取为 TCP 写入套接字缓冲的字节数?

我有一个应用程序使用civetweb(以前称为mongoose)HTTP服务器库来创建MJPEG流。当我的MJPEG设置与客户端连接的网络带宽配置文件相匹配时工作正常,但有时我们会遇到低带宽连接,我想通过丢帧来适应这种情况。现在,当我调用mg_write()时,mongoose库会像这样调用send():send(sock,buf+sent,(size_t)k,MSG_NOSIGNAL);我想做的是检查套接字的传出缓冲区,如果已满,则跳过一帧。有什么方法可以在应用程序级别进行检查吗?编辑:只是给MJPEG人员的旁注,这些TCP缓冲区非常大,我实际上最终测量的只是缓冲区中是否存在任何字节

c++ - p2p 开源库 tcp/udp 组播支持

我的计算机上正在运行某个应用程序。同一应用程序可以在局域网或世界不同地方的多台计算机上运行。我想在他们之间进行交流。所以我基本上想要一个p2p系统。但我将永远知道哪些计算机(特定IP地址)将是对等方。我只希望同龄人具有加入和离开功能。最重要的一个目标是通信速度和所需时间。我假设对等点之间的简单UDP多播(如果存在类似的东西)将是最快的解决方案。即使丢失,我也不想重新传输消息。我应该使用现有的p2p库吗?libjingle等或者只是从头开始创建一些基本框架,因为我的需求非常基本? 最佳答案 我认为您忽略了UDP的要点。从某种意义上说,

c - 在 C 中立即(逐个数据包)从套接字接收 TCP 有效负载

如何在C中逐个数据包地从开放网络套接字接收数据(字节流)?我想在数据到达时立即从套接字中读取数据(数据包一到达机器)。似乎当我在套接字上执行read()(或recv())调用时,我得到了超过10,000字节的整个TCP消息。相反,我想接收第一个TCP段有效载荷,处理它,然后继续下一个,等等。注意-我不想要原始数据包。只是TCP段数据负载。另请注意-本质上,我想通过在数据到达时立即处理数据来最大程度地减少延迟,而不是等待整个TCP消息在TCP层中累积。任何想法将不胜感激,谢谢! 最佳答案 也许我误解了你的问题(例如,我不能完全理解“不

c - C 语言的 Windows 套接字编程

我正在上一门网络类(class),教授正在为全类同学朗读这本书。不用说我不知道​​我在做什么。我们的学期项目是从教科书中复制代码并制作客户端-服务器网络。直接从书中复制代码,不做任何修改。这本书的代码有错误(缺少分号,额外的括号),但我至少设法编译了代码。但是,我遇到了一堆链接错误。例子:错误1errorLNK2019:unresolvedexternalsymbolimpsendto@24referencedinfunction_mainC:\Users\Documents\VisualStudio2010\Projects\Client_Server\Client_Server\C

基于 C++ STL 的二进制序列化数据发送,使用套接字进行网络传输,无需使用库

我需要通过网络将一些复杂的对象发送给对等点。我已经为需要序列化的对象中的每个类成员编写代码,使用ostream和operator我有一个Socket类,它将std::string对象转换为C风格的字符串,然后像这样通过套接字发送它们:intSocket::send(conststd::stringgoodies)const{status=::send(socket,goodies.c_str(),goodies.size(),0);returnstatus;}我在接收器中使用的相同Socket类在将传入消息传递给反序列化应用程序之前使用recv()将传入消息放入std::string中

c - 在 C 中通过 TCP (SOCK_STREAM) 套接字传递结构

我有一个小型客户端服务器应用程序,我希望在其中使用C而不是C++通过TCP套接字发送整个结构。假设结构如下:structsomething{inta;charb[64];floatc;}我发现很多帖子说我需要使用pragmapack或在发送和接收之前序列化数据。我的问题是,使用JUSTpragmapack还是仅仅使用serialzation就足够了吗?还是我需要同时使用两者?此外,由于序列化是处理器密集型过程,这会使您的性能急剧下降,那么在不使用外部库的情况下序列化结构的最佳方法是什么(我想要示例代码/算法)? 最佳答案 您需要以下

c++ - 关于 Swift 中从 C 文件访问 "typedef void PaStream;"的正确语法的任何帮助?

我已经将一个名为portaudio(PortAudiowebsite)的dylibC库编译并导入到一个Xcode6.1Swift项目中,除了一个是typedefvoidPaStream;我无法理解如何在Swift中使用它,在C中我这样声明:PaStream*audioStream=NULL;当我收到一条警告说未声明的类型/未解析的标识符时,任何人都可以在Swift等效项上提供帮助,看起来Swift无法桥接typedefvoidxyz;?非常感谢您的帮助。 最佳答案 C类型定义typedefvoidPaStream;确实没有导入到Sw

c - Swift调用C API时如何处理指针

c库API:mycapi.htypedefstruct{intitype;double*dx;double*dy;}MyObjInfo;typedefMyObjInfo*MyObjHandle;MyObjHandleMyObjInit(constchar*pFile);添加myapi.h作为模块我的快速代码:importFoundationimportmycapiModulevarh:MyObjHandle=MyObjInit("/home/a")varo:MyObjInfo=h.memory////todosomethings//...h.destroy()h=nilprint("\

c - 如何在 swift 3 中使用我的静态库 (.a)

我想在swift3中构建和使用静态库(.a)。示例:我构建了一个libhelloLib.a,并使用它。你好.c#include#include"hello.h"intprintHello(){printf("hellowourl");return0;}你好.h#includeintprintHello();构建为:libHello.a并复制到/usr/local/lib快速代码模块.模块映射modulehello[system]{header"hello.h"link"libhello"export*}Package.swiftimportPackageDescriptionletpa