草庐IT

c++ - winsock2中发送其他数据类型

winsock2中的发送函数只接受字符指针。我如何也通过它发送整数或对象? 最佳答案 constchar*buf需要作为参数传递给send()函数,它只是一个指向字节数组的指针。您需要将整数转换为字节:constintMAX_BUF_SIZE=1024;intint_data=4;constchar*str_data="test";char*buf=(char*)malloc(MAX_BUF_SIZE);char*p=buf;memcpy(&int_data,p,sizeof(int_data));p+=sizeof(int_dat

c++ - 通过在 2 个服务器之间相互发送套接字来共享套接字 (WINSOCK)

我正在尝试编写一个分布式服务器系统(目前由服务器1="main"和服务器2="replacement"组成)。不要介意一些肮脏的方法,只是实现一个分布式服务器的基本功能。在同一台机器。主服务器发送与替换服务器和连接到它的客户端建立连接。现在我想要实现的目标是:主服务器应该将连接客户端的套接字发送到替换服务器,这样万一主服务器不能再工作(超时或其他),替换服务器可以与客户端一起工作并发送/recv与他们。我从主服务器发送到替换服务器的套接字是我通过ClientSocket=::accept(ListenSocket,NULL,NULL);获得的套接字,其中ClientSocket是一个S

sockets - SO_RCVBUF 怎么会小于 TCP 接收窗口呢? (Windows XP)

我有一个在WindowsXP上使用TCP的应用程序。当我使用SO_RCVBUF选项调用getsockopt时,它报告8192字节。但是,Wireshark显示该应用程序通告64K的接收缓冲区。这怎么可能?要有64K的接收窗口,难道不需要64K的缓冲区吗?是否有两种不同的缓冲区? 最佳答案 我正在研究这个,我认为SO_RCVBUF和TCP窗口不一定是同一件事。如果你看http://msdn.microsoft.com/en-us/magazine/cc302334.aspx在“WindowsNT和Windows2000套接字体系结构”

windows-server-2008 - 如何在 Windows Server 2008 上设置 Keepalive

我有win32应用程序,其中winsock用于TCP/IP通信。我正在使用WSAIoctl函数设置keepalive值,它在WindowsXP中工作正常。但是在Win上。Server2008WSAIoctl失败,并且WSAGetLastError返回10022(无效参数),这没有任何意义。我设置keepalive的代码如下;//setper-connectionkeep-aliveoptiontcp_keepalivekeepAliveSettings;keepAliveSettings.onoff=1;keepAliveSettings.keepalivetime=500;eepAl

Linux OSI 相当于 Winsock2 的 LSP

我正在寻找与Windows的winsock2LSP等效的Linux的OSI。特别是我想在linux中过滤应用层协议(protocol)和流量。如有任何信息,我们将不胜感激。 最佳答案 不知道Winsock2LSP的作用,很难回答你的问题。您可以使用适当的packet(7)套接字实现应用层协议(protocol)。阅读手册页以获取更多信息如果你想在用户空间进行网络过滤,你可以使用netfilter_queue工具,通常结合iptablesNFQUEUE目标规则。您可以使用它通过用户空间守护程序有选择地过滤特定类型的流量。希望对您有所帮

c++ - 3次握手丢包

我需要在用c++(使用winsock2)编写的客户端和服务器应用程序之间执行3way停止和等待握手以进行分配。客户端发送SYN。服务器递增客户端序列号并发送SYN-ACK。客户端递增服务器序列号并发送ACK。模拟丢包,客户端和服务端连接一个中间Router程序,偶尔不转发包,造成丢包。我应该如何构建我的sendto()、select()、recvfrom()语句以解决可能的数据包丢失问题?比如SYN丢失,客户端超时,重新发送。如果SYN-ACK丢失,客户端超时并重新发送SYN。但是,如果ACK丢失,我不知道该怎么办。编辑:在我的客户端上基本上是这样的:发送SYN。循环whilesele

c# - 在 C 中使用 WinSock 将数据发送到同一台机器上的 c# 应用程序,“目标主机拒绝连接(c# 部分)

我正在尝试从我的界面获取数据(用c编写)到另一个用c#编写的应用程序。现在,我不确定WinSocks是否是纯C语言,但我使用的是VisualStudio,我界面的其余部分是100%纯C语言。这是我用c#写的“客户端”http://pastebin.com/X9SNcVqn这是我用C语言编写的“服务器”——循环等待连接,构建和运行没有问题注意:DEFAULT_PORT为18042,客户端和服务器端使用相同的端口。我已经下载了wireshark并使用了命令“tcp.porteq”http://pastebin.com/FHZyre2V我还尝试通过我的Windows防火墙和NORTON允许此

c# - unsigned char 到 char * 用于从 C++ WinSock 客户端到 C# 服务器的 TCP

我遇到了一个问题,我认为这只是从unsignedchar转换为char*的一个例子。但是,我没有设法以可行的方式做到这一点!我正在做的是将数据作为unsignedchar[64]读入C++程序。然后需要通过TCP套接字将其传输到等待中的C#TcpListener(我也试过在Linux上使用netcat和Hurcules进行监听。监听器(无论我使用哪个)接收不到任何有意义的信息!如果我char*buffer2=reinterpret_cast(buffer);我得到了一些传输,但它是无意义的,当我在调试期间检查buffer2时它只包含一个“0”。下面是一些使用我自己的SocketClie

windows - 如何暂停 IOCP TCP 套接字服务器?

我的程序类似于HTTP代理,它在一个接口(interface)上等待消息并将它们转发到另一个接口(interface)。该应用程序仅使用IOCP,包括客户端和服务器端。有时,客户端比服务器慢(比率为10或100),无法缓冲太多数据。如何暂停已建立的TCP连接然后恢复它而不丢失任何消息?我试图延迟发布新的recvIOCP事件,但一些消息丢失了。C++/Windows7+ 最佳答案 ItriedtodelaythepostofanewrecvIOCPevent这实际上应该可以解决问题。然后,您的服务器端TCP连接的接收缓冲区将填满您的套

windows - Winsock:与 SO_REUSEADDR 的奇怪冲突

我遇到了一个奇怪的行为。manualclaimed:“当两个套接字绑定(bind)到相同的端口号但在不同的显式接口(interface)上时,没有冲突”。为什么在第3步出现以下情况时系统会失败?这是操作系统中的错误吗?(我在Microsoftforums上的帖子没有答案)是否对此有一些解决方法?第1步。进程A绑定(bind)127.0.1.1:88(默认)—确定第2步。进程B绑定(bind)127.0.0.1:88(使用SO_REUSEADDR)—OK第3步。进程C绑定(bind)127.0.0.1:88(使用SO_REUSEADDR)—失败(10013WSAEACCES)注意:tcp