鱼C论坛

 找回密码
 立即注册
查看: 2229|回复: 0

[技术原创] socket网络通信--QT动画制作(二十一)

[复制链接]
发表于 2017-3-12 12:09:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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荣誉 +5 鱼币 +5 贡献 +3 收起 理由
不二如是 + 5 + 5 + 3 太简洁了。。。

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 16:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表