鱼C论坛

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

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

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

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

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

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

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

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

  3. Window {
  4.     visible: true
  5.     width: 640
  6.     height: 480
  7.     title: qsTr("Hello World")

  8.     MainForm {
  9.     }
  10. }
复制代码

MainForm.ui.qml文件:
  1. import QtQuick 2.5
  2. Rect{}
复制代码

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

  3.   Rectangle {
  4.       width: 360
  5.       height: 360

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

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

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

  27.           }
  28.       }
  29.   }
复制代码

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

  3.   Rectangle {
  4.       width: 360
  5.       height: 360

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

  9.       WebSocketServer {
  10.           id: server
  11.           port:8080
  12.           listen: true
  13.           onClientConnected: {
  14.               webSocket.onTextMessageReceived.connect(function(message) {//用信号传过来的参数接收信息
  15.                   appendMessage(qsTr("Server received message: %1").arg(message));//传过来的信息
  16.               });
  17.           }
  18.           onErrorStringChanged: {
  19.               appendMessage(qsTr("Server error: %1").arg(errorString));
  20.           }
  21.       }


  22.       Text {
  23.           id: messageBox
  24.       }
  25.   }
复制代码

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

  5.   var wsUri = "ws://127.0.0.1:8080";
  6.   var output;

  7.   function init()
  8.   {
  9.     output = document.getElementById("output");
  10.     testWebSocket();
  11.   }

  12.   function testWebSocket()
  13.   {
  14.     websocket = new WebSocket(wsUri);
  15.     websocket.onopen = function(evt) { onOpen(evt) };
  16.     websocket.onclose = function(evt) { onClose(evt) };
  17.     websocket.onmessage = function(evt) { onMessage(evt) };
  18.     websocket.onerror = function(evt) { onError(evt) };
  19.   }

  20.   function onOpen(evt)
  21.   {
  22.     writeToScreen("CONNECTED");
  23.     doSend("WebSocket rocks");
  24.   }

  25.   function onClose(evt)
  26.   {
  27.     writeToScreen("DISCONNECTED");
  28.   }

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

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

  38.   function doSend(message)
  39.   {
  40.     writeToScreen("SENT: " + message);
  41.     websocket.send(message);
  42.   }

  43.   function writeToScreen(message)
  44.   {
  45.     var pre = document.createElement("p");
  46.     pre.style.wordWrap = "break-word";
  47.     pre.innerHTML = message;
  48.     output.appendChild(pre);
  49.   }

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

  51.   </script>

  52.   <h2>WebSocket Test</h2>

  53.   <div id="output"></div>
复制代码

Preview: 明天我们实现一个简单的单工通信软件

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
不二如是 + 5 + 5 + 3 太简洁了。。。

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-4 05:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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