最后一个字母“o”不是“Hello”而是“??o”,所以总是要做什么?我使用了不同的代码,什么都没有(我使用 Sockets 进行数据传输
客户端 C++:
void StartConnect(string in, string out)
{
WSAData wsaData;
SOCKADDR_IN addr;
int result = WSAStartup(MAKEWORD(2, 2), &wsaData);
cout << "startup: " << result << endl;
SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
addr.sin_family = AF_INET;
addr.sin_port = htons(8005);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
result = connect(s, (SOCKADDR*)&addr, sizeof(addr));
cout << "Connect: " << result << endl;
int count = 0;
char sendBuf[512] = "Hello";
int sendResult;
sendResult = send(s, sendBuf, sizeof(sendBuf), 0);
}
服务器c#:
static int port = 8005; // порт для приема входящих запросов
static void Main(string[] args)
{
// получаем адреса для запуска сокета
IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port);
// создаем сокет
Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
// связываем сокет с локальной точкой, по которой будем принимать данные
listenSocket.Bind(ipPoint);
// начинаем прослушивание
listenSocket.Listen(10);
Console.WriteLine("Сервер запущен. Ожидание подключений...");
while (true)
{
Socket handler = listenSocket.Accept();
// получаем сообщение
StringBuilder builder = new StringBuilder();
int bytes = 0; // количество полученных байтов
byte[] data = new byte[512]; // буфер для получаемых данных
do
{
bytes = handler.Receive(data);
builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
}
while (handler.Available > 0);
Console.WriteLine(DateTime.Now.ToShortTimeString() + ": " + builder.ToString());
// отправляем ответ
string message = "ваше сообщение доставлено";
data = Encoding.Unicode.GetBytes(message);
handler.Send(data);
// закрываем сокет
handler.Shutdown(SocketShutdown.Both);
handler.Close();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
我尝试转换成另一种utf16格式,还是不行……但是C#的客户端和服务端都没有出现这样的问题,告诉我怎么办?

将 C# 翻译成
Encoding.ASCII有助于解决问题。