alltolove 发表于 2017-3-12 12:09:19

socket网络通信--QT动画制作(二十一)

本帖最后由 alltolove 于 2017-3-12 12:21 编辑

效果: 打开两个程序,点击一个程序后另外一个产生响应信息

我们首先要新建两个完全独立的QT项目
第一个项目代码:
main.qml文件:
import QtQuick 2.5
import QtQuick.Window 2.2

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    MainForm {
    }
}
MainForm.ui.qml文件:
import QtQuick 2.5
Rect{}

Rect.qml文件:
import QtQuick 2.0
import QtWebSockets 1.0

Rectangle {
      width: 360
      height: 360

      WebSocket {
          id: socket
          url: "ws://127.0.0.1:8080"//这是本地的地址
          onStatusChanged: if (socket.status == WebSocket.Error) {
                               console.log("Error: " + socket.errorString)
                           } else if (socket.status == WebSocket.Open) {
                               socket.sendTextMessage("Hello World")//如果接通就向接通方发送helloworld
                           } else if (socket.status == WebSocket.Closed) {
                               messageBox.text += "\nSocket closed"
                           }
          active: false
      }

      Text {
          id: messageBox
          text: socket.status == WebSocket.Open ? qsTr("Sending...") : qsTr("Welcome!")
          anchors.centerIn: parent
      }

      MouseArea {
          anchors.fill: parent
          onClicked: {
            socket.active = !socket.active//点一下开启,再点一下关闭

          }
      }
}
第二个项目代码:
前两个文件跟第一个项目的一样
Rect.qml文件:
import QtQuick 2.0
import QtWebSockets 1.0

Rectangle {
      width: 360
      height: 360

      function appendMessage(message) {
          messageBox.text += "\n" + message
      }

      WebSocketServer {
          id: server
          port:8080
          listen: true
          onClientConnected: {
            webSocket.onTextMessageReceived.connect(function(message) {//用信号传过来的参数接收信息
                  appendMessage(qsTr("Server received message: %1").arg(message));//传过来的信息
            });
          }
          onErrorStringChanged: {
            appendMessage(qsTr("Server error: %1").arg(errorString));
          }
      }


      Text {
          id: messageBox
      }
}

这个还可以跟网页通信,先打开服务器端,然后打开网页,服务器端就会产生响应,网页的html代码如下:
<!DOCTYPE html>
<meta charset="utf-8" />
<title>WebSocket Test</title>
<script language="javascript" type="text/javascript">

var wsUri = "ws://127.0.0.1:8080";
var output;

function init()
{
    output = document.getElementById("output");
    testWebSocket();
}

function testWebSocket()
{
    websocket = new WebSocket(wsUri);
    websocket.onopen = function(evt) { onOpen(evt) };
    websocket.onclose = function(evt) { onClose(evt) };
    websocket.onmessage = function(evt) { onMessage(evt) };
    websocket.onerror = function(evt) { onError(evt) };
}

function onOpen(evt)
{
    writeToScreen("CONNECTED");
    doSend("WebSocket rocks");
}

function onClose(evt)
{
    writeToScreen("DISCONNECTED");
}

function onMessage(evt)
{
    writeToScreen('<span style="color: blue;">RESPONSE: ' + evt.data+'</span>');
    websocket.close();
}

function onError(evt)
{
    writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data);
}

function doSend(message)
{
    writeToScreen("SENT: " + message);
    websocket.send(message);
}

function writeToScreen(message)
{
    var pre = document.createElement("p");
    pre.style.wordWrap = "break-word";
    pre.innerHTML = message;
    output.appendChild(pre);
}

window.addEventListener("load", init, false);

</script>

<h2>WebSocket Test</h2>

<div id="output"></div>

Preview: 明天我们实现一个简单的单工通信软件
页: [1]
查看完整版本: socket网络通信--QT动画制作(二十一)