- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
可能是迄今为止我遇到的最奇怪的错误。
我需要连接到某些在 Windows XP Embedded 下运行的第 3 方应用程序。网络连接存在并有效:我能够使用在 Windows XP SP3 上运行的 PuTTY 连接到预期的端口并执行一些类似 telnet 的操作。现在,我的应用程序是一个非常简单的 C (VC++ 2008) 程序:
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData = { 0 };
if (SOCKET_ERROR == WSAStartup(MAKEWORD(2, 0), &wsaData))
return Error("Failed to initialize sockets.");
SOCKET client = INVALID_SOCKET;
const char *pserver = "172.22.1.3";
client = socket(AF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET != client)
{
sockaddr_in s = { 0 };
s.sin_family = AF_INET;
s.sin_port = htons(4799);
hostent *e = gethostbyname(pserver);
memmove(&s.sin_addr, e->h_addr, e->h_length);
std::cout << "Connecting to: " << pserver << std::endl;
if (SOCKET_ERROR != connect(client, (sockaddr*)&s, sizeof(s)))
{
std::cout << "Successfully connected." << std::endl;
}
else
std::cout << "Can't connect: " << WSAGetLastError() << std::endl;
}
getchar();
if (INVALID_SOCKET != client)
closesocket(client);
return 0;
}
每次我编译和运行这个程序时,我都会收到 WSAETIMEDOUT 错误。感到困惑,我开始深入挖掘并在接收方生成两个 Wireshark 转储 - 一个使用 PuTTY,另一个使用我的应用程序,从同一台 PC 运行并连接到同一台设备(下面的第一个 SYN 数据包)。
腻子:
No. Time Source Destination Protocol Info
1 0.000000 172.22.1.61 172.22.1.3 TCP atc-lm > 4799 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=0 TSV=0 TSER=0
Frame 1 (78 bytes on wire, 78 bytes captured)
Ethernet II, Src: Dell_b8:4a:31 (00:26:b9:b8:4a:31), Dst: EEPD_96:04:48 (00:e0:33:96:04:48)
Internet Protocol, Src: 172.22.1.61 (172.22.1.61), Dst: 172.22.1.3 (172.22.1.3)
Transmission Control Protocol, Src Port: atc-lm (1170), Dst Port: 4799 (4799), Seq: 0, Len: 0
0000 00 e0 33 96 04 48 00 26 b9 b8 4a 31 08 00 45 00 ..3..H.&..J1..E.
0010 00 40 04 a1 40 00 80 06 9b aa ac 16 01 3d ac 16 .@..@........=..
0020 01 03 04 92 12 bf 9a 99 fc ec 00 00 00 00 b0 02 ................
0030 ff ff 2c bd 00 00 02 04 05 b4 01 03 03 00 01 01 ..,.............
0040 08 0a 00 00 00 00 00 00 00 00 01 01 04 02 ..............
我的申请:
No. Time Source Destination Protocol Info
1 0.000000 Dell_b8:4a:31 EEPD_96:04:48 FC [Malformed Packet]
Frame 1 (78 bytes on wire, 78 bytes captured)
Ethernet II, Src: Dell_b8:4a:31 (00:26:b9:b8:4a:31), Dst: EEPD_96:04:48 (00:e0:33:96:04:48)
MDS Header(Unknown(0)/Unknown(0))
[Malformed Packet: FC]
0000 00 e0 33 96 04 48 00 26 b9 b8 4a 31 00 00 00 00 ..3..H.&..J1....
0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0020 00 00 00 00 00 00 00 00 6d 8b 00 00 00 00 b0 02 ........m.......
0030 ff ff 90 73 00 00 02 04 05 b4 01 03 03 00 01 01 ...s............
0040 08 0a 00 00 00 00 00 00 00 00 01 01 04 02 ..............
基本上,整个 IP 负载都被删除为 0x00 而不是有效字节。
最奇怪的部分来了。我为 .NET 3.5 写了一个类似的程序:
static void Main(string[] args)
{
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Unspecified);
socket.Connect("172.22.1.3", 4799);
Console.WriteLine("Connected");
Console.ReadLine();
socket.Disconnect(true);
}
相同的 Windows XP SP3 PC,相同的网络连接 - 我的 .NET 应用程序只是连接到远程应用程序!此外,我原来的 C 应用程序在 Windows 7 x64 下的另一台笔记本电脑上工作得很好。在戴了一整天的头带后,我有两台 Windows XP SP3 笔记本电脑,我的 C 应用程序无法连接到远程客户端,还有一台 Windows XP SP3 和一台 Windows 7 x64 笔记本电脑,我的 C 应用程序可以正常运行。
我的第一个猜测是网络驱动程序,但 PuTTY 和 .NET 应用程序只能在同一台笔记本电脑上运行!
有没有人经历过类似的事情并可以给我建议?
谢谢。
最佳答案
这对我来说不对:
memmove(&s.sin_addr, e->h_addr, e->h_length);
^^^^^^^^^-- here
无法访问 VC 文档,但它不应该是 &e->h_addr
吗?
只是一个 W.A.G.由于您的版本的 IP block 已清零,按理说 memmove 从错误的位置读取并复制了一 block 未使用但已清零的内存。
关于debugging - Winsock 的 connect() 永久返回 WSAETIMEDOUT,但 PuTTY 连接在同一个端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3348972/
Debug.Assert/Debug.Fail 是否自动条件编译#if "DEBUG"?或者它是否更像是没有附加调试器(即使在发行版中)它什么也做不了?如果是这样,将它们留在您的代码中是否会对性能产生
我有一个应用程序,我配置了多个路由,一切正常,直到我配置的最新路由不起作用(显示错误的屏幕)。 我的问题是如何进行调试?没有打印错误日志,我无法找到如何获取有关正在发生的事情的更多日志。我也不知道从哪
我正在 Intellij 中调试代码。我使用 maven 来构建项目,并且在本地 .m2 存储库中有该项目的各种版本。当我开始调试时,Intellij 继续从项目的前一个快照中选择旧版本的代码。如何让
我喜欢在业余时间进行一些 TiVo 黑客事件 - TiVo 使用 Linux 变体和 TCL 。我想在我的 Windows 笔记本电脑上编写 TCL 脚本,测试它们,然后将它们通过 FTP 传输到我的
我有 ASM 代码,它使用循环语法打印 abc 。这是我的代码 ;abc.com .model small .code org 100h start: mov ah, 02h mov
我在 Debugging .net 2.0 Applications 中看到了以下代码 [Conditional("DEBUG")] void AssertTableExists() { #i
在大型项目中哪个更好用,为什么: #if DEBUG public void SetPrivateValue(int value) { ... } #endif 或 [System.D
我似乎无法让调试器运行。调试运行图标变灰,菜单选项丢失。 这只是main的情况,我可以很好地调试单元测试。 类似的问题提到了项目结构,但我看不出有什么不对: $GOPATH/src/foo.bar.c
只是想知道我的浏览器一直询问我是否想在每次点击浏览器链接刷新时停止调试非常烦人,因为这会减慢开发时间。 有没有其他人遇到过这个? 干杯 最佳答案 更新的答案,现在找到根本原因 经过两年看到这个错误时断
我正在尝试包含调试/发布相关编译器标志,例如: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x -Wall -DUSE_BOOST") set
当我尝试使用 debug.phonegap.com 调试我的phonegap 应用程序时遇到问题。 我把这个视频放在 HTML 文档的头部 在启动应用程序之前,我从 build.phonegap.
GDB 7.0以后,支持反向调试。 生成核心转储时,我可以使用反向调试命令吗? 我怎样才能做到这一点? 最佳答案 你不能。核心文件是某个时间点程序状态的快照。要在该状态下向后移动,您需要程序状态的较早
首先:如果之前有人问过这个问题,我很抱歉。我是一个熟练的谷歌用户,但这确实让我难住了,我找不到任何东西。 我目前正在编写一个小型库,我想对其进行调试。我还希望能够完全关闭调试,并且编译后的代码不应包含
我想在 tomcat 中将级别日志记录设置为 DEBUG,但在控制台中仍然只有 INFO 和 WARN 输出。谁能告诉我哪里出了问题? 我的 C:\tomcat\logging.properties:
我已经开始像这样使用定义类了: internal sealed class Defines { /// /// This constant is set to true iff th
在使用编译器指令时,我不清楚以下两个代码片段中哪一个是正确/首选的,以及为什么。似乎我见过的大多数开发人员和开源项目都使用第一种,但我也看到第二种也经常使用。 #ifdef DEBUG [self d
我遇到错误,无法完成构建。我搜索了 Stackoverflow 和 Github。我已经尝试了很多方法,但我无法修复。请帮忙。 (1) 在 [src/nullnull/debug, src/debug
我刚刚意识到,使用 TFS 部署时,DEBUG 处理器指令仍然有效,有没有办法更改 TFS/Azure 网站或构建定义中的设置,而不是在本地解决方案配置? 我仍然希望本地解决方案保持调试状态,只有部署
我有一段代码在 VS2008,C++ 中以 Debug模式运行。 问题是,当我逐行调试代码时,在代码的一个非常奇怪的地方,它崩溃并说: debug assertion faild. Expressio
我有一个简单的 Xamarin.Forms 项目,我在 Visual Studio 中运行,使用 iphone 模拟器。我在 App.cs 中有以下代码: protected override voi
我是一名优秀的程序员,十分优秀!