Tag: 网络

中accept函数的地址大小长度

在“sys / socket.h”中它定义了函数: int accept (int socket, struct sockaddr *address, socklen_t *address_len); 我的问题与socklen_t * address_len有关 ,它基于手册指向socklen_t ,输入指定提供的sockaddr结构的长度,输出指定存储地址的长度。 在什么条件下, address_len大小输入与输出不同? 我需要这个,所以我可以在我为sockaddr_in结构创建的包装器上模拟一个测试用例。 非常感谢!

将套接字绑定到ansi c中的端口80

当我尝试将端口80绑定到c中的套接字时,我总是得到错误,我没有权限使用此端口。 获得此许可有简单的方法吗?

Libssh – SSH MESSAGE未实现

我正在尝试使用ssh_connect和libssh进行连接,但是我收到以下错误。 我不知道这意味着什么。 有什么想法吗? [2014/09/30 00:53:00.015877, 2] channel_open: Creating a channel 43 with 64000 window and 32768 max packet [2014/09/30 00:53:00.050776, 1] ssh_packet_unimplemented: Received SSH_MSG_UNIMPLEMENTED (sequence number 3) [2014/09/30 00:54:59.949316, 1] ssh_socket_exception_callback: Socket exception callback: 1 (0) [2014/09/30 00:54:59.949483, 1] ssh_socket_exception_callback: Socket error: disconnected Error allocating SFTP session: Socket error: disconnected 这是代码 ** Initialises SSH Session […]

如何检测win32上的datacard连接和断开事件?

我有一张数据卡,一旦插入数据卡,我就会使用wm_device_change事件获取事件。 但是,当我的数据连接实际连接到外部世界时,我也希望得到事件。 我的意思是说,一旦我们点击数据卡的连接/断开按钮,我就想得到这个事件。 换句话说,我想知道什么时候建立连接并断开连接。 数据卡是Vodaphone数据卡,我正在尝试使用该数据卡进行浏览。 无论什么是SDK,操作系统应该在某个地方获得连接和断开网络的事件是否有任何方法来访问操作系统正在获取的事件。 正如我在通知中看到的那样,Vodaphone连接和LAN连接的变化。 数据卡是其中具有SIM的USB设备,并且可以用于通过GPRS访问互联网。 如何在Win32 C / C ++程序中执行此操作?

跨平台替代Winsock?

我基本上正在寻找一种跨平台的方式来做基本的事情,比如接受连接和发送和接收数据。 什么库适用于Linux,Windows和Mac? 谢谢

C中的WinSock程序仅适用于本地计算机

我是网络编程的新手,开始学习如何在C中使用WinSock。 我现在对网络没有任何了解。 无论如何,我使用WinSock为Client和Server编写了以下代码。 服务器: #include #include #include #include #define MY_ERROR 1 #define PORT 7777 #define MAX_NUM_CLIENTS 1 /* I don’t know how to thread right now. */ #define MAX_CLIENT_MSG_LEN 1000 int main() { WSADATA wsa; SOCKET mySocket, acceptSocket; struct sockaddr_in server, client; int sockAddrInLength = sizeof(struct sockaddr_in); char clientMessage[MAX_CLIENT_MSG_LEN]; int clientMessageLength; char* message; int running […]

设计EAP-TLS客户端问候消息

我正在尝试设计启动EAP-TLS握手的第一个数据包。 这就是我的数据包当前的样子: 我通过在C中手动填充具有相应信息的缓冲区来设计EAP部分。 我使用OpenSSL派生的TLS部分,如本问题所示。 然后我去了RFC并在数据包中添加了4个八位字节长度字段和TLS标志。 但wireshark拒绝接受它! 我尝试逐字节地将TLS数据与通过TCP发生的TLS连接进行比较,我可以看到客户端hello(hex为16),TLS版本(0x0301:TLS 1.0)的字段顺序相同。 你能帮我辨别我哪里出错吗? 谢谢! 此外,如果有人知道一个客户端可以生成这些消息,所以我可以比较它们,这也是有益的。 谢谢!

IPv6地址的正则表达式

我有一个IPv6地址的正则表达式,如下所示 IPV4ADDRESS [ \t]*(([[:digit:]]{1,3}”.”){3}([[:digit:]]{1,3}))[ \t]* x4 ([[:xdigit:]]{1,4}) xseq ({x4}(:{x4}){0,7}) xpart ({xseq}|({xseq}::({xseq}?))|::{xseq}) IPV6ADDRESS [ \t]*({xpart}(“:”{IPV4ADDRESS})?)[ \t]* 它是正确的所有格式的IPv6地址,包括 1) non-compressed IPv6 addresses 2) compressed IPv6 addresses 3) IPv6 addresses in legacy formats.(supporting IPv4) 传统格式的IPv6地址的理想示例是 2001:1234::3210:5.6.7.8 OR 2001:1234:1234:5432:4578:5678:5.6.7.8 As you can see above there are 10 groups separated by either `”:” or “.”.` 与普通IPv6地址中的8组相反。这是因为最后4组由“”组成。 应该压缩成IPv6地址的最低32位。因此我们需要10组来满足128位。 但是,如果我使用以下地址格式 2001:1234:4563:3210:5.6.7.8 这里用“:”分隔的每个组代表16位。最后四个组用“。”分隔。 […]

从sockaddr *转换为sockaddr_in *增加了所需的对齐

当我使用一些看起来像的代码时,编译器会产生这个警告。 …. for(p = res; p != NULL; p = p->ai_next) { void *addr; std::string ipVer = “IPv0”; if(p->ai_family == AF_INET) { ipVer = “IPv4”; struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr; addr = &(ipv4->sin_addr); } else { ipVer = “IPv6”; struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr; addr = &(ipv6->sin6_addr); } …. } 其中p […]

如何在c中序列化结构?

我有一个struct对象,包含几个原始数据类型,指针和结构指针。 我想通过套接字发送它,以便它可以在另一端使用。 由于我想预先支付序列化成本,如何初始化该结构的对象,以便可以立即发送而无需编组? 例如 struct A { int i; struct B *p; }; struct B { long l; char *s[0]; }; struct A *obj; // can do I initialize obj? int len = sizeof(struct A) + sizeof(struct B) + sizeof(?); obj = (struct A *) malloc(len); … write(socket, obj, len); // on the receiver end, […]