2019年8月31日 星期六

c# client <--->QTcpSocket server 中文亂碼解決之道

又是個轉碼的問題,很簡單,怎麼來就怎麼去
-----QT端(先不管.h檔中的宣告),readyRead event slot---------------
void MainWindow::onReadyRead()
{
    QTcpSocket* sender = static_cast<QTcpSocket*>(QObject::sender());
    //從client讀入字串,因為是utf8碼,所以要用fromUtf8轉換
    QByteArray datas = sender->readAll();
    QString msgTxt=QString::fromUtf8(datas); 
    qDebug()<<"msg from client"<<msgTxt;

    //回應給client
    QString  msg2Reply("收到");
    sender->write(msg2Reply.toUtf8());
}
---------------------------------------------------------------
-----C# socket client------------------------------------------
 Socket sender = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
 sender.SendTimeout = 60;
 sender.Connect(remoteIP);
 //轉成utf8碼,送到Qt socket server 
 string msg2Send =("Qt5.12真好用!!");
 byte[] msg = System.Text.Encoding.GetEncoding("utf-8").GetBytes(msg2Send);
 int bytesSent = sender.Send(msg);

  //讀取QtSocket server的傳回值,用utf8碼轉成字串
 byte[] bytes = new byte[1024];
 int bytesRec = sender.Receive(bytes);
 string returnMsg = Encoding.UTF8.GetString(bytes, 0, bytesRec);
 sender.Shutdown(SocketShutdown.Both);
 sender.Close();
-------------------------------------------------

以上,大家加油了




沒有留言:

張貼留言