问题标签 [network-programming]

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 投票
5 回答
12670 浏览

web-services - Httplistener 中的“指定的网络名称不再可用”

我已经构建了一个简单的 Web 服务,它只使用 HttpListener 来接收和发送请求。有时,服务会因“指定的网络名称不再可用”而失败。当我写入 HttpListenerResponse 的输出缓冲区时,它似乎被抛出。

这是错误:

ListenerCallback() 错误:指定的网络名称在 System.Net.HttpResponseStream.Write(Byte[] buffer, Int32 offset, Int32 size) 不再可用

这是代码的有罪部分。responseString 是发送回客户端的数据:

它似乎并不总是一个巨大的缓冲区,两个例子是 3,816 字节和 142,619 字节,这些错误相隔大约 30 秒抛出。我不认为我的单个客户端应用程序会超载 HTTPlistener。客户端偶尔会突发发送/接收数据,几次交换接连发生。

大多数谷歌搜索显示这是一个常见的 IT 问题,当出现网络问题时,会显示此错误——大多数帮助针对的是系统管理员诊断应用程序的问题,而不是开发人员追踪错误。我的应用程序已经在不同的机器、网络等上进行了测试,我认为这不仅仅是一个网络配置问题。

这个问题的原因可能是什么?

0 投票
3 回答
15553 浏览

multithreading - POSIX 取消点是什么?

POSIX 取消点是什么?我正在寻找一份明确的 POSIX 取消点列表。

我之所以问,是因为我有一本书说accept()select()取消点,但我看到互联网上的网站声称它们不是。

此外,如果 Linux 取消点与 POSIX 取消点不同,我也想要一份它们的列表。

0 投票
3 回答
539 浏览

performance - 您用什么来测试(功能/负载/压力)您的网络服务与它的自定义协议?

我最近创建了一个回合制游戏服务器,它可以接受成千上万的同时客户端连接(长话短说 - Linux 上的 epoll)。通信基于一个简单的、自定义的、基于线路的协议。该服务器允许客户端连接、在游戏比赛中寻找其他玩家、玩所述游戏(发送动作、聊天消息等),并在游戏结束时收到通知。

我现在要做的是通过模拟客户端连接来测试服务器。我希望支持成千上万的同时连接,所以这个测试对我来说非常重要。你们自己的测试用什么?

我现在正在研究的一些东西是:pexpect(python 期望 lib 用于功能测试)和 tsung 用于负载测试。

我希望能够从我的笔记本电脑上进行测试,因为我没有可以连接的客户端计算机集群。也许我需要使用 ip aliasing 或类似的东西来生成数千个出站套接字(每个接口 AFAIK 限制为 65K)。

无论如何,在我看来,我需要一些相当定制的东西,但我想在我走这条路之前我会问一下。

谢谢!

0 投票
3 回答
3911 浏览

java - JVM中的socket是如何实现的?

我想知道,如何在 Java 虚拟机中实现套接字。

  • 是否包含本机库?
  • 如果,它是一个 C 库吗?

我在哪里可以找到有关此主题的信息?关于网络的官方 Java 教程对我没有帮助。

一些有趣的链接会有所帮助。

更新:Sun 是否提供了任何官方信息?

提前致谢!

编辑 我找到了一个证明,我将我的答案标记为正确的。感谢奥斯卡,这对我来说是完美的暗示!!!谢谢!

0 投票
1 回答
16143 浏览

python - 为什么我看到“对等方重置连接”错误?

我正在使用 python 2.6.1 在 Mac OS X 10.5机器上测试cogen 。我有一个简单的回显服务器和客户端泵,可以创建 10,000 个客户端连接作为测试。1000、5000 等都非常出色。然而,在大约 10,000 个连接时,服务器开始丢弃随机客户端 - 客户端会看到“对等方重置连接”。

我在这里缺少一些基本的网络背景知识吗?

请注意,我的系统配置为处理打开的文件(launchctl 限制、sysctl(maxfiles 等)和 ulimit -n 都是有效的;去过那里,做到了)。此外,我已经证实 cogen 正在选择在幕后使用 kqueue。

如果我在 client-connect() 调用中添加一点延迟,一切都会很好。因此,我的问题是,为什么在短时间内有高频率连接时,处于压力下的服务器会丢弃其他客户端?还有其他人遇到过这个吗?

为了完整起见,这是我的代码。

这是服务器:

这是客户:

感谢您提供任何信息!

0 投票
2 回答
19947 浏览

java - Android HTTP 连接

谁能告诉我为什么这在 Android 模拟器中不起作用?从浏览器我可以访问并且服务器是内部的。我能想到的只是我的应用程序缺少一些配置,因此它可以访问网络层。

引发 UnknownHostException

谢谢

0 投票
10 回答
3700 浏览

java - Java 中的 Pacman 问题

对于我的大学作业,我必须制作一个可联网的 pacman 版本。我想我最好先制作一个 pacman 的本地副本来解决这个问题,然后将此功能扩展为网络游戏。

我不得不说我对 java GUI 开发和在 java 中利用这些特性还比较陌生。

我已经开始关注上面关于 java 中的游戏开发的链接和一个 pacman 游戏的例子。

我决定将迷宫表示为一个 int 数组,其中不同的值意味着不同的事物。然而,当主游戏循环中的绘制方法运行时,我正在用这种方法重新绘制整个迷宫。

然而,这为我提供了不到 1fps 的速度。尽管我注意到上面链接的示例在每次调用paint方法时都使用类似的重绘方式,并且我相信在不可见的图像上会这样做(有点像双缓冲[我使用了像第一个链接一样的 BufferStrategy解释]) 重新绘制迷宫的更好方法是什么?

任何与此有关的指针/建议都会很有用。

感谢您的时间。

http://pastebin.com/m25052d5a - 用于主要游戏类。

编辑:我刚刚注意到在尝试查看哪些代码需要这么长时间才能执行之后发生了一些非常奇怪的事情。

在我添加的 paintClear(Graphics g) 方法中

这使整个事情顺利进行 - 但是当我删除这些行时,整个事情变慢了?是什么原因造成的?

更新代码

0 投票
4 回答
9008 浏览

c# - 如何通过没有 IP 地址的网卡发送 WOL 包(或任何东西)?

我正在尝试在所有接口上发送 WOL 包以唤醒网关(这是 DHCP 服务器,因此机器还没有 IP)。

而且似乎我只能将套接字绑定到 IP 和端口对......

所以问题是:如何创建一个绑定到没有 IP 的 NIC 的套接字(或其他东西)?(任何语言都可以。首选c#)

@ctacke:我知道 WOL 是由 MAC 地址完成的......我的问题是 Windows 只在 Windows 认为是主 NIC 的 NIC 上发送 UDP 广播(它甚至不是我的 Vista 机器上具有默认路由的 NIC )。而且我似乎找不到将套接字绑定到没有 IP 地址的接口的方法。(就像 DHCP 客户端一样)

@Arnout:为什么不呢?客户端知道网关的 MAC 地址。我只想像 DHCP 客户端最初那样发送一个 WOL 数据包......(DHCP 发现数据包声称来自 0.0.0.0)我不介意我是否必须逐字节构造整个数据包......

0 投票
6 回答
6463 浏览

c - 当套接字关闭时,UDP套接字上的选择不会结束 - 我做错了什么?

我正在使用 Linux 系统(带有 2.6.20 内核的 Ubuntu 7.04 服务器)。

我有一个程序,它有一个线程(thread1)等待选择一个 UDP 套接字变得可读。我正在使用 select(我的套接字作为单个 readfd 和单个 exceptfd),而不是只调用 recvfrom,因为我想要超时。

从另一个线程,我关闭并关闭了套接字。如果我在 thread1 在 recvfrom 中阻塞时执行此操作,则 recvfrom 将立即终止。如果我在线程 1 在超时的选择中阻塞时执行此操作,则选择不会立即终止,但最终会正确超时。

谁能告诉我为什么一旦套接字关闭,选择就不会退出?那不是例外吗?我可以看到它在哪里不可读(显然),但它已关闭,这似乎是例外。

这是套接字的打开(所有错误处理都被删除以保持简单):

这是 thread1 执行的 select 语句:

更新:显然(如下所述),关闭套接字不是例外情况(从选择的角度来看)。我想我需要知道的是:为什么?而且,这是故意的吗?

我真的很想了解这种选择行为背后的想法,因为它似乎与我的期望背道而驰。因此,我显然需要调整我对 TCP 堆栈如何工作的想法。请给我解释一下。

0 投票
2 回答
1924 浏览

c - C中的套接字编程

好的,所以我正在尝试使一些 UDP 代码正常工作,而在使用 C 进行网络编程时,我几乎不熟悉。我正在使用此处的示例文件

基本上我只是在给定端口上监听传入的 UDP 数据包,然后我想以同样的方式发回一些数据。下面是相关部分。

此时套接字已设置并绑定到选择的端口并等待传入​​的数据包:

我只想发送“你好!” 字符串直接返回给发送者。

这失败并出现错误“ GSPProxy: sendto: File name too long”。据我所知,这是 [ENAMETOOLONG] 错误代码。

但是... ** 是什么意思?什么文件?什么是太长了?

是我不能重用套接字来发回数据,还是我刚刚犯了另一个新手错误?

最好的祝福,