C# 클라이언트와 C++ 서버가 있습니다. 나는 소켓을 통해 사용자의 페이스 북 이름을 보내고있다. 처음에는 이름의 길이를 씁니다. 예 : 05/*sizeofname*/ getbytes("asdfg")
오류 메시지가 표시되지 않습니다. 하지만 이렇게하려고하면 İ
에 2 바이트가 있기 때문에 05/*size of name*/ getbytes("İasdf")
은 İasd
으로 읽습니다. 하지만 다른 문자는 1 바이트입니다. C++ 서버에서 올바르게 읽는 법을 모릅니다.C# 클라이언트 및 C++ 서버의 유니 코드 데이터 소켓
서버 C++ :
byte firstlen = packet.byteread();
if (firstlen >= 150 || firstlen <= 0) { printf("first %d came\n", firstlen); goto hataver; }
char * firstname = new char[firstlen];
firstname = (char*)packet.charread(firstlen);
printf("income firstname = %s\n", firstname);
char * charread(int idlen)
{
char * retarray = new char[idlen];
memcpy(retarray, buffs + marker, idlen);
marker += idlen;
retarray[idlen] = 0;
return retarray;
}
클라이언트 C#을
yenisi.eklestrlen(firstname, (byte)sizeof(profile.FirstName)); //(byte)firstname.Length);
public void eklestrlen(string eklenecek,byte uzunluk)
{
ekle1(uzunluk);
ekles(eklenecek);
}
public void ekle1(byte eklenecek)
{
Paket2[marker] = eklenecek;
marker++;// eklenecek.Length;
}
public void ekles(string eklenecek2)
{
byte[] eklenecek = Encoding.UTF8.GetBytes(eklenecek2);
Array.Copy(eklenecek, 0, Paket2, marker, eklenecek.Length);
marker += eklenecek.Length;
}
[최소, 완료 및 확인 가능한 예제] (https://stackoverflow.com/help/mcve)를 제공해주십시오. –