Flutter实现简单的TCP客户端
运行截图:
示例代码 (main.dart)
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
void main() {
runApp(TcpDebuggerApp());
}
class TcpDebuggerApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
title: 'TCP Debugger',
home: TcpDebuggerScreen(),
);
}
}
class TcpDebuggerScreen extends StatefulWidget {
_TcpDebuggerScreenState createState() => _TcpDebuggerScreenState();
}
class _TcpDebuggerScreenState extends State<TcpDebuggerScreen> {
Socket? _socket;
String _response = '';
final TextEditingController _hostController = TextEditingController();
final TextEditingController _portController = TextEditingController();
final TextEditingController _messageController = TextEditingController();
void _connectToServer() async {
final String host = _hostController.text;
final int port = int.tryParse(_portController.text) ?? 0;
try {
_socket = await Socket.connect(host, port);
_socket?.listen( (List<int> data) {
setState(() {
_response = utf8.decode(data);
});
},
onError: (error) {
print('Error: $error');
},
onDone: () {
print('Disconnected from server');
},
);
} catch (e) {
print('Error: $e');
}
}
void _sendMessage() {
if (_socket == null) return;
final String message = _messageController.text;
_socket!.write(message);
setState(() {
_response = '';
});
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('TCP Debugger'),
),
body: Padding(
padding: const EdgeInsets.all(26.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
TextField(
controller: _hostController,
decoration: InputDecoration(labelText: 'Host'),
),
TextField(
controller: _portController,
decoration: InputDecoration(labelText: 'Port'),
keyboardType: TextInputType.number,
),
TextField(
controller: _messageController,
decoration: InputDecoration(labelText: 'Message'),
),
SizedBox(height: 10),
ElevatedButton(
onPressed: _connectToServer,
child: Text('Connect'),
),
SizedBox(height: 10),
ElevatedButton(
onPressed: _sendMessage,
child: Text('Send Message'),
),
SizedBox(height: 10),
Text('Response:'),
Expanded(
child: SingleChildScrollView(
child: Text(_response),
),
),
],
),
),
);
}
}
示例代码 (pubspec.yaml)
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
dart:io: ^2.15.0