0
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int size =  MemoEnter->GetTextLen() + 1;
    wchar_t *szBuff = new wchar_t[size];
    memset(szBuff, 0, sizeof(szBuff));
    MemoEnter->GetTextBuf((wchar_t *)szBuff, size);
    TcpClient->SendBuf(szBuff, sizeof(szBuff));
    LogOut->Lines->Add(szBuff);
    delete []szBuff;
}  

为什么 TcpClient 不发送任何内容?服务器没问题。连接正常。Telnet 将数据发送到服务器,但此代码不会。

伙计们!我尝试过了

TcpClient->SendBuf("fsd", 3);

仍然一无所获

4

2 回答 2

2

这可能会导致问题:

sizeof(szBuff); // Returns the sizeof a wchar_t*,
                // not the number of characters in szBuff

改变:

memset(szBuff, 0, sizeof(szBuff));
...
TcpClient->SendBuf(szBuff, sizeof(szBuff));

至:

memset(szBuff, 0, sizeof(wchar_t) * size);
...
TcpClient->SendBuf(szBuff, wcslen(szBuff));

如果 的第二个参数TcpClient->SendBuf()是字节数,而不是字符数,则更改为:

TcpClient->SendBuf(szBuff, wcslen(szBuff) * sizeof(wchar_t));
于 2012-01-31T13:26:38.527 回答
0

您的使用sizeof()肯定是问题所在。您发送的数据指定了指向缓冲区的指针的大小,而不是缓冲区本身的大小。指针的大小在 32 位中为 4,在 64 位中为 8。您需要使用实际缓冲区大小而不是指针大小。

而不是使用new[]运算符,您应该使用 VCL 的String类,例如:

void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
    String s = MemoEnter->Text; 
    TcpClient->SendBuf(s.c_str(), ByteLength(s)); 
    LogOut->Lines->Add(s); 
}

请注意,这StringUnicodeString. 如果接收者不期望UTF-16编码数据,那么您需要在发送数据之前将数据转换为另一种编码,例如:

void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
    String s = MemoEnter->Text; 
    UTF8String utf8 = s;
    TcpClient->SendBuf(utf8.c_str(), utf8.Length()); 
    LogOut->Lines->Add(s); 
}

或者:

void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
    String s = MemoEnter->Text; 
    AnsiString ansi = s; // <-- potential data loss for non-ASCII characters!
    TcpClient->SendBuf(ansi.c_str(), ansi.Length()); 
    LogOut->Lines->Add(s); 
}

或者:

void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
    String s = MemoEnter->Text; 
    AnsiStringT<SomeCodePage> ansi = s; // <-- use a suitable codepage to avoid data loss!
    TcpClient->SendBuf(ansi.c_str(), ansi.Length()); 
    LogOut->Lines->Add(s); 
}
于 2012-01-31T22:43:59.173 回答