问题标签 [winsock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
854 浏览

c++ - winsock 缺少数据 c++ win32

我正在编写一个需要通过网络发送数据的应用程序。我已完成申请,但发送数据时出现问题。每次发送一条数据,4个字符后就被截断,剩下的就是垃圾。该应用程序是我为一个学校项目编写的远程键盘记录器,它要求您演示钩子和winsock 的用法。我们可以在论坛上寻求帮助。任何帮助,将不胜感激!

这里的代码:

服务器:

客户:

0 投票
2 回答
3119 浏览

posix - 在 Winsock 中混合文件句柄和套接字

我正在将一些代码从 BSD 套接字移植到 Winsock,但我不确定如何处理下面的情况。

我的原始应用程序在标准输入和网络套接字上运行一个选择:

尝试在 Winsock 中运行它会出现错误 10038 (WSAENOTSOCK),这是有道理的,因为 Linux 中的文件句柄 0 (stdin) 不是 Windows 中的套接字(更准确地说:SOCKET 类型)。

有没有一种简单的方法可以将此测试移植到 Windows 套接字?

0 投票
3 回答
4028 浏览

c++ - winsock2 的替代品,带有 C++ 中的示例服务器源

我正在使用在http://tangentsoft.net/wskfaq/examples/basics/select-server.html找到的这个示例实现

这完成了我需要的大部分工作,处理连接而不阻塞,并且在其线程中完成所有工作(不像某些示例那样为每个连接创建一个新线程),但我很担心,因为我被告知 winsock 只会支持最多 64 个客户端连接:S

这64个连接是真的吗?

我还有什么其他选择?有一个类似实现的 c++ 示例会很酷。

谢谢

0 投票
1 回答
349 浏览

java - 在 C 中实现 Java 的 getResponseCode()?

如果有帮助,C#的WebRequest中也有一个类似的类。虽然我不想在 java 或 .NET 中使用它,但我想知道如何在本机 C/C++ 代码(对于 Windows)中实现它。

以供参考:

打印出来:

意思是“好的”

我知道我可能需要使用套接字并发送一个用户代理字符串,但我不知道从哪里开始。每当我学习一门新语言时,我喜欢做的第一件事就是尝试将我的代码移植到它上面,但是这个让我很难过。

任何帮助表示赞赏

0 投票
1 回答
1520 浏览

windows - 当请求的缓冲区大小大于可用数据量时,为什么 recv 会失败?

TCP 传输堆栈的基础是他们的作者有时记录的许多缓冲区限制。在 WinXP SP3 上,我认为我遇到过其中之一,但不知道为什么。

我已经实现了一个简单的客户端来从服务器获取数据(由一位同事用 Java 编写)。该协议是将数据的长度(按网络顺序)写入四个字节,然后写入数据。服务器将数据以 1024 字节块的形式写入 TCP 流。客户端正确接收到数据缓冲区的长度,分配内存并循环重复调用recv获取所有数据:

如果我将 TCP_BlockSize 设置为 4095 或更低,一切都很好,我可以接收数兆字节的传输。当我尝试 4096 大小的接收块时,对剩余数据的最后一个请求,即 len - currentLen < TCP_BlockSize,总是失败,返回值为 -1,errno = 0。我尝试了一些实验,比如修剪传输的数据在 815054 和 834246 字节之间,对于 4096 字节的接收块,一切都变得繁荣起来。

另一个细节:服务器在发送最后一个字节后关闭套接字。这就引出了一个问题,为什么不返回剩余的数据?在流为空并关闭之前不从recv返回-1感觉像是一种缺陷,因为当流不为空并且关闭以从recv接收-1时这是不明确的。

那么如何获取最后的数据呢?

0 投票
3 回答
840 浏览

c - 解锁连接到套接字会导致上下文切换吗?

我正在使用 winsock 并调用connect非阻塞套接字。当 CPU 被其他进程占用时,我偶尔会在函数返回之前看到一些延迟(最多 200 毫秒)。据我所知,connect非阻塞套接字上的 a 应该立即返回,但可能connect会导致上下文切换,并且由于 CPU 正在努力工作,我的线程需要一段时间才能再次获得 CPU 时间并退出函数。

我知道(或至少相当肯定)connect阻塞套接字会导致上下文切换,但非阻塞套接字会导致上下文切换connect吗?

0 投票
4 回答
2449 浏览

c# - Error 10048 when trying to open TcpChannel

I'm pretty inexperienced in Remoting. I'm trying to use it and keep receiving WinSock error 10048 when opening TcpChannel.

I use the simplest code from MSDN:

When ran for the first time, it work and quit correctly, but for second and so on I keep receiving error 10048, like socket 9090 is already in use. Netstat -a do not show port 9090 at all, like it was closed already.

What am I doing wrong?

0 投票
1 回答
5426 浏览

visual-c++ - 为什么 bind() 返回 SOCKET_ERROR

没有:

  • MFC
  • ATL

使用纯 C++,WSAGetLastError()返回10014 - 错误地址

  • 我错过了什么/做错了什么?

代码说明:

0 投票
2 回答
5065 浏览

c++ - 主机名未使用 Winsock 转换为 IP 地址

getaddrinfo()不会将主机名转换为 IP 地址,因此也不会connect()转换为服务器。我的实现有问题吗 - 编译时没有警告消息?

这个函数调用是否connect正确?

下面列出了完整的实现:

0 投票
3 回答
797 浏览

winapi - 如何区分 Win32 套接字句柄和其他管道句柄?

我需要确定我的代码未创建的句柄是否GetFileType()==FILE_TYPE_PIPE是套接字。似乎没有用于此的 API。

我尝试了以下方法。总体思路是使用特定于套接字的函数,并将失败视为非套接字。

  • getsockopt()——这是我的第一次尝试。不幸的是,当被同一个(非套接字)句柄上的许多线程调用时,它似乎挂起。
  • WSAEnumNetworkEvents()-- 这就是 Gnulib 所做的,但如果句柄是套接字,则会产生不良的副作用。
  • getpeername()- 这就是 cygwin 所做的,但对于某些套接字也会失败。猜测错误是否意味着套接字性似乎并不可靠且未来安全。

我不介意该解决方案是否仅适用于某些版本的 Windows,例如 Vista,在一般情况下我总是可以使用其他方法。