当前博客:04、桌面端之TCP客户端与服务端交互

157 次浏览【转载需注明来源】

博客作者:【快码FOF编程】

个性签名:寒窗苦读十年一朝凤舞九天

TCP的最重要功能就是通信,就是本章节我们需要实现一个TCP客户端与服务端通信交互的案例,首先创建TCP服务和TCP客户端,代码如下:

变量 服务端 = TCP服务端.创建TCP服务({ "端口": 3000, "地址": "0.0.0.0", "最大连接数": 1000, "是否组包": 真 }, (反馈信息) => {
	调试输出(反馈信息);
});
变量 客户端句柄 = TCP客户端.连接服务器({"端口": 3000,"地址": "127.0.0.1"}, (反馈信息) => {调试输出(反馈信息)})

知识点:上方代码中分别创建了服务端和客户端,因为本集课是简单学习,所以我们将客户端和服务端都写在了一个程序中,在实际的项目生产环境中,一般服务端是一个独立的程序;并存在于云服务器中,这样你的所有用户才可以访问你的服务器交互。

接下来使用客户端给服务端发送一段文本数据,代码如下:

TCP客户端.发送数据(客户端句柄,"你好服务端")

然后服务端就会收到对应的信息,用调试器查看后输出如下:

可以看见服务端收到的数据是一个对象,数据储存在"数据内容"字段中,而是是一段这样的数据:[228, 189, 160, 229, 165, 189, 230, 156, 141, 229, 138, 161, 231, 171, 175]

这种数据叫做"缓冲区类"数据,是桌面端开发中的一种专属数据,因为我们传输的数据可能是文本、图片、文件等各种数据,所以用这样的数据来储存是最好的,那么我们要如何把"缓冲区类"转换成正常的字符串文本数据呢?答案是可以使用之前所学习到的编码转换命令来实现,具体的代码如下:

变量 服务端 = TCP服务端.创建TCP服务({ "端口": 3000, "地址": "0.0.0.0", "最大连接数": 1000, "是否组包": 真 }, (反馈信息) => {
    如果 (反馈信息["状态"]=="收到数据") {
        调试输出(编码转换类.编码转换("utf8",反馈信息["数据内容"]));
    }
});

上方的代码含义首先是判断状态是不是等于收到数据,如果是代表收到了客户端发送过来的数据,那么此时则可以使用:编码转换类.编码转换("utf8",反馈信息["数据内容"])  这个命令将"缓冲区类"数据转换成正常的字符串数据。

 

重点:服务端如何返回数据给客户端?

上面客户端已经向服务端发送了数据,那么服务端要如何返回数据给客户端呢?服务端返回数据给客户端一般是使用返回命令,只需要返回一个固定格式的对象给客户端即可,具体代码如下:

变量 服务端 = TCP服务端.创建TCP服务({ "端口": 3000, "地址": "0.0.0.0", "最大连接数": 1000, "是否组包": 真 }, (反馈信息) => {
	如果 (反馈信息["状态"] == "收到数据") {
		局部变量 文本数据 = 编码转换类.编码转换("utf8", 反馈信息["数据内容"]);
		如果 ((文本数据 = "你好服务端")) {
			返回 { "是否反馈": 真, "反馈数据": "你好客户端,我是服务端", "是否断开": 假 };
		}
	}
});

在上面的代码中,服务端判断客户端是否是发送的"你好服务端"这段文本,如果是这段文本则通过 返回 这个关键字命令返回一个对象给客户端,这个对象中有非常多的键名,但我们常用的就三个:

  1. 是否反馈,代表是否要反馈数据给客户端,为真时会将反馈数据字段的数据发送给客户端。
  2. 反馈数据,代表要反馈给客户端的数据,可以是字符串或者任意数据
  3. 是否断开,代表是否要求客户端断开连接,一般设置为假即可

上面我们就实现了一个完整的客户端与服务端交互的代码,下面放出完整的代码数据:

<!文档类型 网页类型>
<网页 语言代码="中文">
	<网页头部>
		<网页信息 文档编码="UTF8" />
		<网页信息 名称="页面视图" 关联数据="视图宽度=填充视图宽度,初始缩放值=1,最大缩放值=1,用户缩放状态=假" />
		<网页信息 关联HTTP="兼容模式" 关联数据="最高IE版本" />
		<网页标题>window窗口</网页标题>
	</网页头部>
	<网页主体>
		<!--这里编写网页代码-->
		<区块 id="窗口">
			<区块 类名="窗口标题">
				<区块 类名="标题" 行内样式="@窗口_允许拖动;">
					<标题1>FOFStudio</标题1>
				</区块>
				<区块 类名="工具">
					<区块 类名="最小化" 点击回调="窗口类.最小化()"></区块>
					<区块 类名="最大化" 点击回调="窗口类.最大化()"></区块>
					<区块 类名="关闭" 点击回调="窗口类.关闭窗口()"></区块>
				</区块>
			</区块>
			<区块 类名="窗口内容">
				<!--请在此编写窗口内容-->
				<按钮 点击回调="发送消息给服务端()">发送数据</按钮>
			</区块>
		</区块>
		<脚本>
			调试器窗口类.打开调试器窗口();
            变量 服务端 = TCP服务端.创建TCP服务({ "端口": 3000, "地址": "0.0.0.0", "最大连接数": 1000, "是否组包": 真 }, (反馈信息) => {
            	如果 (反馈信息["状态"] == "收到数据") {
            		局部变量 文本数据 = 编码转换类.编码转换("utf8", 反馈信息["数据内容"]);
            		如果 ((文本数据 = "你好服务端")) {
            			返回 { "是否反馈": 真, "反馈数据": "你好客户端,我是服务端", "是否断开": 假 };
            		}
            	}
            });
			变量 客户端句柄 = TCP客户端.连接服务器({ "端口": 3000, "地址": "127.0.0.1" }, (反馈信息) => {
				调试输出(反馈信息);
			});

			定义函数 发送消息给服务端() {
				TCP客户端.发送数据(客户端句柄, "你好服务端");
			}
		</脚本>
	</网页主体>
</网页>
默认排序
Generic placeholder image
Generic placeholder image
快码FOF编程 Time: 2023-05-11 19:12:47

完整博客来了,非常有用的知识点


04、桌面端之TCP客户端与服务端交互