套接字c++,接收信息的奇怪问题
Sockets c++ , weird issue with recieved info
事情是这样的:我想制作一个远程cmd,这样无论何时我在工作,我都可以从家用电脑下载文件,有时它不会以我想要的方式响应,当我发送dir命令时,它甚至不会执行if语句。
如果这很明显,请原谅我。我对这些东西很陌生。
注意事项:服务器连接,客户端打印出发送的缓冲区。
这些是与不同的程序
服务器.cpp
#include "FirstTouch.h"
#pragma comment(lib,"ws2_32")
void SendCommands()
{
while (1)
{
char SendBuffer[1500];
cin >> SendBuffer;
send(sConn, SendBuffer, 1500, 0);
if (SendBuffer == "dir")
{
printf("system_dir initiatedn");
Sleep(200);
char File[1500];
recv(sConn, File, strlen(File), 0);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 9);
cout << File << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 5);
delete File;
}
}
}
int main()
{
ConnectToServer();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 5);
printf("connected");
system("cls");
SendCommands();
return 0;
}
客户端.cpp
#include <winsock.h>
#include <iostream>
#pragma comment(lib,"ws2_32")
SOCKET s; //Socket handle
//CONNECTTOHOST – Connects to a remote host
bool ConnectToHost(int PortNo, char* IPAddress)
{
//Start up Winsock…
WSADATA wsadata;
int error = WSAStartup(0x0202, &wsadata);
//Did something happen?
if (error)
return false;
//Did we get the right Winsock version?
if(wsadata.wVersion != 0x0202)
{
WSACleanup(); //Clean up Winsock
return false;
}
//Fill out the information needed to initialize a socket…
SOCKADDR_IN target; //Socket address information
target.sin_family = AF_INET; // address family Internet
target.sin_port = htons(PortNo); //Port to connect on
target.sin_addr.s_addr = inet_addr(IPAddress); //Target IP
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //Create socket
if (s == INVALID_SOCKET)
{
return false; //Couldn't create the socket
}
//Try connecting...
if (connect(s, (SOCKADDR *)&target, sizeof(target)) == SOCKET_ERROR)
{
return false; //Couldn't connect
}
else
return true; //Success
}
//CLOSECONNECTION – shuts down the socket and closes any connection on it
void CloseConnection()
{
//Close the socket if it exists
if (s)
closesocket(s);
WSACleanup(); //Clean up Winsock
}
int main()
{
bool Conn = false;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
printf("Trying to make a reliable connection to server...");
while (!Conn)
{
Conn = ConnectToHost(444, "127.0.0.1");
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 5);
system("cls");
printf("Connected say hi!n");
while (1)
{
char RecvBuffer[1500];
recv(s, RecvBuffer, 1500, 0);
printf(RecvBuffer);
std::cout << std::endl;
if (RecvBuffer == "dir")
{
printf("Executing...n");
Sleep(100);
system("dir >> temp.txt");
HANDLE hFile = CreateFile("temp.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
LPVOID FileContent = nullptr;
LPDWORD NumOfBytes = nullptr;
ReadFile(hFile, FileContent, 1500, NumOfBytes, NULL);
CloseHandle(hFile);
delete[] NumOfBytes;
send(s, (char*)FileContent, 1500, 0);
delete FileContent;
}
}
return 0;
}
recv()不能保证填充缓冲区。你必须循环。
相关文章:
- 警告处理为错误这里有什么问题
- CGAL 3D 周期性德劳内三角测量与信息的问题
- C++代码不打印信息,有什么问题?
- 问题将信息复制到指针阵列中
- 从类模块检索信息以在 switch 语句中输出时出现问题
- 获取存储在矢量结构中的信息时出现问题
- 从C++数组调用信息看似简单的问题
- 获取索引信息的问题-SQL Server
- C++ 问题将信息传递给 pthreads
- 使用基对象修改/访问派生类的信息的有问题的设计
- 从地图中获取字符分类信息时出现问题
- 我在 c++ 中的赋值重载运算符有什么问题?(包括详细信息)
- 套接字c++,接收信息的奇怪问题
- xcode 构建错误:从指针到较小类型"int"的语义问题丢失了信息
- 在打印数组中的信息时遇到问题,无法弄清楚如何运行存储在类中的数组?
- Clang链接器问题和获取调试信息
- c++ If语句问题-显示错误信息
- MPI 中的非阻塞通信和 MPI 等待问题.并非所有信息都正确传递
- 是KDE Qt授权问题信息误导或Qt.io是错误的
- Switchcase语句问题.从文本文件中读取信息