【发布时间】:2018-07-30 17:18:04
【问题描述】:
我有一个小的 shell 程序,其中客户端是用 c++ 编写的,而服务器是用 c# 编写的。客户端应该只向服务器写入一些 cmd 命令的 awnseres。一切都很完美,除了一件事:服务器输出完全垃圾!!
这是c#中的服务器:
static NetworkStream Stream;
static byte[] AWNSER = new byte[255];
static void Main(string[] args)
{
TcpListener listen = new TcpListener(IPAddress.Any, 123);
listen.Start();
Stream = listen.AcceptTcpClient().GetStream();
Stream.BeginRead(AWNSER, 0, 255, HNDLR, null);
while (true)
{
var str = Console.ReadLine();
byte[] MESSAGE = Encoding.UTF8.GetBytes(str + "&& cd");
Stream.Write(MESSAGE, 0, MESSAGE.Length);
}
}
static void HNDLR(IAsyncResult a)
{
Stream.EndRead(a);
Stream.BeginRead(AWNSER, 0, 255, HNDLR, null);
Console.WriteLine(Encoding.UTF8.GetString(AWNSER));
}
这是c++中的客户端代码
FILE *fp;
char AWNSER[255];
WSAData wsaData;
WORD DllVersion = MAKEWORD(2, 1);
if (WSAStartup(DllVersion, &wsaData) != 0) //no error
{
cout << "Winsock startup failed";
}
SOCKADDR_IN addr;
int addrlen = sizeof(addr);
addr.sin_port = htons(123);
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("199.166.177.22");
SOCKET Connection = socket(AF_INET, SOCK_STREAM, NULL);
if (connect(Connection, (SOCKADDR*)&addr, addrlen) != 0)
{ /*ERROR*/
}
else
{
fp = _popen("dir", "r");
while (fgets(AWNSER, 255, fp) != NULL) {
cout << AWNSER;
send(Connection, AWNSER, 255, NULL);
AWNSER[255];
}
_pclose(fp);
}
这是服务器输出的示例:
Volumeseriennummer: BAF0-6BB2
Windows
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
olumeseriennummer: ABF1-7AA3
Windows
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
olumeseriennummer: ABF1-7AA3
Windows
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Verzeichnis von C:\Users\User\Source\MyProblem
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
erzeichnis von C:\Users\User\Source\MyProblem
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
30.07.2018 19:08 <DIR> .
myProblem
非常感谢您的帮助
【问题讨论】:
-
啊,好吧,服务器正在读取他已经阅读过的东西,所以有点乱。你能举个例子说明你如何用代码解决问题吗?
标签: c# c++ shell networking