在Flutter应用中使用Socket?

我创建了Flutter应用。我需要将我的应用程序连接到本地网络套接字服务。如下所示,我可以使用telnet

Connect,发送数据和从服务器接收数据。我使用Flutter

web_socket插件和示例。我可以连接到服务器并发送数据,但是我无法捕获(或获取数据,它什么也没显示。)数据。在Flutter的Google网上论坛中,有人建议我使用流而不是StreamBuilder。

To send data I use;         Q101:_:49785:_:ABCDE

And receive data I get; 1:_:2:_:119351:_:NİYAZİ TOROS

当我使用此示例(https://flutter.io/cookbook/networking/web-

sockets/)时,我的套接字服务出现错误:

Q: 28.06.2018 08:53:57->GET / HTTP/1.1

A: 28.06.2018 08:53:57 ->:1:_:1:_:FAIL1

Last login: Tue Jun 26 15:01:44 on ttys000

Niyazis-MBP:~ niyazitoros$ telnet

telnet> telnet 192.168.1.22 1024

Trying 192.168.1.22...

Connected to 192.168.1.22.

Escape character is '^]'.

Q101:_:49785:_:*************

1:_:2:_:119351:_:NİYAZİ TOROS

基于@Richard Heap的建议:

import 'dart:async';

import 'dart:convert';

import 'dart:io';

void connect(InternetAddress clientAddress, int port) {

Future.wait([RawDatagramSocket.bind(InternetAddress.anyIPv4, 0)]).then(

(values) {

RawDatagramSocket _socket = values[0];

_socket.listen((RawSocketEvent e) {

print(e);

switch (e) {

case RawSocketEvent.read:

Datagram dg = _socket.receive();

if (dg != null) {

dg.data.forEach((x) => print(x));

}

_socket.writeEventsEnabled = true;

break;

case RawSocketEvent.write:

_socket.send(

new Utf8Codec().encode('Hello from client'), clientAddress, port);

break;

case RawSocketEvent.closed:

print('Client disconnected.');

}

});

});

}

main(List<String> arguments) {

print("Connecting to server..");

var address = new InternetAddress('192.168.1.22');

int port = 1024;

connect(address, port);

}

我得到这个:

/Users/niyazitoros/flutter/bin/cache/dart-sdk/bin/dart --enable-asserts --enable-vm-service:59683 /Users/niyazitoros/IdeaProjects/github/untitled/bin/main.dart

Observatory listening on http://127.0.0.1:59683/

Connecting to the server.

RawSocketEvent.write

回答:

正如attdona所说,

您的服务器不会使用websocket协议,但是会公开一个纯TCP套接字。

所以你需要一个TCP套接字,并有一个伟大的教程SocketsServerSockets,你可以找到这里。

这是一个片段:

import 'dart:io';

import 'dart:async';

Socket socket;

void main() {

Socket.connect("localhost", 4567).then((Socket sock) {

socket = sock;

socket.listen(dataHandler,

onError: errorHandler,

onDone: doneHandler,

cancelOnError: false);

}).catchError((AsyncError e) {

print("Unable to connect: $e");

});

//Connect standard in to the socket

stdin.listen((data) => socket.write(new String.fromCharCodes(data).trim() + '\n'));

}

void dataHandler(data){

print(new String.fromCharCodes(data).trim());

}

void errorHandler(error, StackTrace trace){

print(error);

}

void doneHandler(){

socket.destroy();

}

以上是 在Flutter应用中使用Socket? 的全部内容, 来源链接: utcz.com/qa/433965.html

回到顶部