Flutter实现简单的TCP客户端

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值