小编San*_*urg的帖子

C/Unix中的Socketpair()

我在同一系统上有2个应用程序,我需要来回通信.根据我的研究,我认为这称为Inter Process Communication,使用socketpair()是解决我问题的最佳方法.

我正在撕裂我的头发(字面意思)试图开始在C中创建带socketpair()的套接字.根据我的理解,套接字是一个非常复杂的主题,我是一个新手C程序员肯定无法帮助这种情况.

我用谷歌搜索过去48小时,阅读教程等,但我仍然无法得到它.我理解这个概念,但代码太混乱了.我已经读了几遍这篇文章:http://beej.us/guide/bgnet/html/single/bgnet.html,但这还不够简单.

有人可以提供一些例子(如此简单的五年级学生可以理解)或指向我一个很好的教程?

c unix sockets ipc

29
推荐指数
2
解决办法
3万
查看次数

在Windows上使用sys/socket.h函数

我正在尝试在Windows中使用socket.h函数.基本上,我目前正在查看https://beej.us/guide/bgnet/html/multi/clientserver.html#datagram上的示例代码.我知道socket.h是一个Unix函数 - 无论如何我在编译这个示例代码时可以轻松地模拟该环境吗?不同的IDE /编译器会改变什么吗?

否则,我想我需要利用虚拟化的Linux环境,这可能是最好的,因为代码最有可能在UNIX环境中运行.

谢谢.

c sockets windows

28
推荐指数
1
解决办法
8万
查看次数

多平台方式将std :: wstring写入C++文件中

我一直在努力做一些看起来很简单的事情:将内容写入std :: wstring到磁盘.假设我有以下要写入纯文本文件的字符串:

std::wstring s = L"???."; // random characters pulled from baidu.cn
Run Code Online (Sandbox Code Playgroud)
  1. 使用std::codecvt_utf8或提升语言环境

这是我使用的代码:

std::wofstream out(destination.wstring(), std::ios_base::out | std::ios_base::app);
const std::locale utf8_locale = std::locale(std::locale(), new boost::locale::utf8_codecvt<wchar_t>());
out.imbue(utf8_locale);
// Verify that the file opened correctly
out << s << std::endl;
Run Code Online (Sandbox Code Playgroud)

这在Windows上运行良好,但遗憾的是我在Linux上编译它:codecvt_utf8在通常的发行版提供的编译器上还没有提供,而Boost:Locale只包含在Boost 1.60.0中,这也是一个太近的版本对于发行版的存储库.如果不设置区域设置,则不会向文件写入任何内容(在两个系统上).

  1. 用fwrite

下一次尝试:

FILE* out = fopen("test.txt", "a+,ccs=UTF-8");
fwrite(s.c_str(), wcslen(s.c_str()) * sizeof(wchar_t), 1, out);
fclose(out);
Run Code Online (Sandbox Code Playgroud)

这适用于Windows,但不会在Linux上向该文件写入任何内容.我也尝试以二进制模式打开文件,但这并没有改变任何东西.不设置该ccs部分会导致无法解密的垃圾写入文件.

我显然在这里遗漏了一些东西:将该字符串写入文件的正确方法是什么?

c++ encoding character-encoding

17
推荐指数
1
解决办法
684
查看次数

方法ob_start和ob_flush不起作用,为什么?

我希望在长时间的导入操作中使用ob_start()/ ob_flush()to,给我一些进展.

以下是我正在做的简单概述:

<?php
ob_start ();

echo "Connecting to download Inventory file.<br>";
$conn = ftp_connect($ftp_site) or die("Could not connect");

echo "Logging into site download Inventory file.<br>";
ftp_login($conn,$ftp_username,$ftp_password) or die("Bad login credentials for ". $ftp_site);

echo "Changing directory on download Inventory file.<br>";
ftp_chdir($conn,"INV") or die("could not change directory to INV");

//      connection, local, remote, type, resume
$localname = "INV"."_".date("m")."_".date('d').".csv";
echo "Downloading Inventory file to:".$localname."<br>";

ob_flush();
flush();
sleep(5);

if (ftp_get($conn,$localname,"INV.csv",FTP_ASCII)) 
{
    echo "New Inventory File Downloaded<br>";
    $datapath = $localname; …
Run Code Online (Sandbox Code Playgroud)

php ob-start progress-bar

10
推荐指数
3
解决办法
5万
查看次数

使用"char"进行网络字节顺序转换

我一直被教导如果一个整数大于一个char,你必须解决字节排序问题.通常,我只是将它包装在hton [l | s]中并用ntoh [l | s]将其转换回来.但我很困惑,为什么这不适用于单字节字符.

我很想知道为什么会这样,并且希望经验丰富的网络程序员帮助我解释为什么字节排序仅适用于多字节整数.

参考:https://beej.us/guide/bgnet/html/multi/htonsman.html

c++ network-programming

7
推荐指数
1
解决办法
1万
查看次数

如何在C中连接客户端/服务器(Beej的网络编程指南)

我正在编写一个简单的C网络编程教程:https: //beej.us/guide/bgnet/html/multi/index.html

通过它看完后,我的计划是实现测试客户端/服务器程序,然后开始玩,修改的东西,添加的东西,等我实现(第一客户端/服务器组处理TCP连接)在这里找到该程序:https: //beej.us/guide/bgnet/html/multi/clientserver.html

基本上,"服务器"在一台机器上运行,当客户端连接时,服务器只发送"Hello,world!" 当我在同一台机器上运行并连接到localhost时,这可以正常工作.

但是,我无法连接不同的机器(在Debian和OpenBSD服务器上都试过,没有iptables/pf规则集).连接只是超时,我不确定为什么.我可以ping和ssh两者.

任何人,特别是熟悉本教程的人,都能指出我正确的方向吗?

编辑:服务器上没有X,所以没有截图,但netstat -tlnp | grep 3490什么都没给我.

netstat -an显示在3490上侦听tcp连接.

c sockets networking connect

6
推荐指数
1
解决办法
8518
查看次数

将PHP与本地C++程序链接

我一直在研究这几个小时,但我所看到的一切看起来都相当令人生畏.到目前为止,我一直在使用PHP来处理我网站上的所有简单内容.我正在做很多统计工作,我希望c ++可用于更强烈的计算.

c ++将在与PHP相同的Unix机器上本地运行.

以下是我不知道如何做的事情:

<?php 
//c++ program has a counter initialized to 0
//PHP tells c++ to add 5 to the counter.  $incremented is 5
$incremented = increment_in_cpp_and_return(5);
//$incremented_again will be 7
$incremented_again = increment_in_cpp_and_return(2);
?>
Run Code Online (Sandbox Code Playgroud)

当然,我正在运行一些蒙特卡罗模拟并遍历真正的大树而不是增加数字,但这并不是什么阻碍了我.

C++只需要监听一个数字并返回另一个数字(最多可能是JSON中的一些东西).c ++必须在调用之间跟踪其变量.

我已经完成了很多关于TCP,套接字编程等方面的阅读,我只是有点怀疑这个和实例一样复杂.很多事情都指向了我这个https://beej.us/guide/bgnet/html/multi/clientserver.html#simpleserver

如果真的超过100行c ++,是否有一些流行的库,或者是否有另一种语言的简单实现?

谢谢!

php c++ networking

5
推荐指数
2
解决办法
1669
查看次数

对于FreeBSD或NetBSD,C语言中套接字编程的最快I/O策略或方法是什么?

我正在研究C中的网络套接字编程.为FreeBSD和/或NetBSD实现的最快(最高性能)I/O策略是什么?具体来说,如果我在C语言中为FreeBSD/NetBSD实现HTTP/HTTPS Web服务器,接收数据的最有效方法是什么?

我已经阅读了这些资源,但似乎找不到答案:http : //beej.us/guide/bgnet/html/multi/index.html http://www.kegel.com/c10k.html

c sockets networking freebsd http

2
推荐指数
1
解决办法
364
查看次数

宏htonl将内部逗号解释为参数分隔符

这是在编译时返回的异常错误,仅限于一些编译器参数.

好的 g++ -std=c++11 -m64 -O3 -DNDEBUG

但是g++ -std=c++11 -m64 -Wall -g,出现此问题:

宏"htonl"传递了7个参数,但只占用了1个

码:

const unsigned int h = htonl(hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash);
Run Code Online (Sandbox Code Playgroud)

我不确定问题是来自调用htonl还是来自我的模板化的哈希.

你知道怎么解决这个问题吗?

其他信息:

template<const char C0,         const char C1 =  '\0', const char C2 =  '\0', 
         const char C3  = '\0', const char C4 =  '\0', const char C5 =  '\0', 
         const char C6  = '\0', const char C7 =  '\0', const char C8 =  '\0', 
         const char C9  = …
Run Code Online (Sandbox Code Playgroud)

c++ gcc htonl c++11

2
推荐指数
1
解决办法
39
查看次数

InnoSetup,如何在向导中打开用户指定的端口?

在 innosetup 安装程序中,我的目标是配置 Windows 防火墙,为我的软件打开足够的端口

[Run]
Filename: "{sys}\netsh.exe"; Parameters: "firewall set portopening protocol=TCP port=""{code:GetServerPort()}"" name=NxTCP mode=ENABLE"; StatusMsg: "Opening TCP Port ""{code:GetServerPort()}"; Flags: runhidden

[Code]
function GetServerPort(): String;
begin
  Result := "5555"; //obtained with the Wizard
end;
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

未找到所需的函数或过程“GetServerPort()”。

或者如果我()在通话时挂断电话

“GetServerPort”原型无效

inno-setup windows-firewall wizard

1
推荐指数
1
解决办法
1834
查看次数