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();
-------------------------------------------------

以上,大家加油了




2019年8月20日 星期二

for Extjs4,只列出異動列的異動欄位及資料

有時,你真的不必把所有的資料都帶回去server處理,只要列舉有異動到的列,甚至只要異動到的欄位,
如下
-----------------------------------------------------
 for (var i = 0; i < someStore.getModifiedRecords().length; i++) {
      let change=someStore.getModifiedRecords()[i].getChanges();
     //change裡的資料是 key:資料欄位,value:新值的map/object/ {..... }型態
      ..
      ...
 }
------------------------------------------
很實用的
大家一起加油吧