【发布时间】:2017-04-26 18:07:48
【问题描述】:
我在winapi中做了一个服务器和一个客户端。
客户端发送一个数字和一个基数,服务器返回该基数的数字。 我的问题是它在 Windows 10 中有效,但在 Windows 7 中无效,我不明白为什么。有什么帮助吗?
客户:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <assert.h>
#include <windows.h>
#include <string>
#define BUFFSIZE 512
using namespace std;
int main()
{
LPDWORD bytesRead = 0;
char res[50];
int num, base;
LPCTSTR Roura = TEXT("\\\\.\\pipe\\pipeline");
HANDLE h = CreateFile(Roura, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
while (true) {
for (int i = 0; i < 50; i++) {
res[i] = 0;
}
printf("Number: ");
cin >> num;
WriteFile(h, &num, sizeof(int), NULL, NULL);
if (num == 0) {
CloseHandle(h);
return 0;
}
printf("Base: ");
cin >> base;
WriteFile(h, &base, sizeof(int), NULL, NULL);
ReadFile(h, res, BUFFSIZE, bytesRead, NULL);
cout << res << endl;
}
return 0;
}
服务器:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <assert.h>
#include <windows.h>
#include <string>
#define _CRT_SECURE_NO_WARNINGS
#define BUFFSIZE 512
using namespace std;
int main()
{
int num, base;
LPDWORD bytesRead = 0;
char result[50];
char end[] = {"\0"};
LPCTSTR Roura = TEXT("\\\\.\\pipe\\pipeline");
HANDLE h = CreateNamedPipe(Roura, PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, 1, BUFFSIZE, BUFFSIZE, 0, NULL);
assert(h != INVALID_HANDLE_VALUE);
if (!ConnectNamedPipe(h, NULL)) return -1;
while (true) {
ReadFile(h, &num, BUFFSIZE, bytesRead, NULL);
if (num == 0) {
CloseHandle(h);
return 0;
}
ReadFile(h, &base, BUFFSIZE, bytesRead, NULL);
_itoa(num, result, base);
WriteFile(h, result, strlen(result), NULL, NULL);
}
return 0;
}
【问题讨论】:
-
你的error handling在哪里?
-
首先检查错误。每个
ReadFile和WriteFile都成功了吗?你不知道。如果失败,请致电GetLastError找出原因。 -
@CareyGregory 我不明白为什么它在 Windows10 和 Windows7 中有效。
-
@ValentinEmilCudelcu 通过检查每个语句的成功与否并在失败时找到确切的错误,这将有助于告诉您为什么它在 Windows 10 中有效但在 Windows 7 中失败。
-
您对
ReadFile的使用完全错误并导致堆栈损坏
标签: c++ windows winapi windows-7 windows-10