前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 ># Dart Socket之TCP粘包

# Dart Socket之TCP粘包

作者头像
用户1175783
发布2019-09-10 14:14:40
2.7K0
发布2019-09-10 14:14:40
举报

# Dart Socket之TCP粘包

# 什么是TCP粘包

socket编程-tcp粘包

# dart中的socket

  • RawDatagramSocket ​ 用于UDP通信

* RawServerSocket、RawSocket、ServerSocket、Socket

代码语言:javascript
复制
​	RawServerSocket,RawSocket:低级别的tcp服务提供类,可用于IP,ICMP协议		

​	ServerSocket、Socket:用于TCP通信
  • RawSecureServerSocket,RawSecureSocket、SecureServerSocket、SecureSocket ​ 支持SSL、TSL的安全通信
# dart之udp通信
代码语言:javascript
复制
udp是无状态通信,通常用于服务发现。
代码语言:javascript
复制
//Server端
var udpSocket = await RawDatagramSocket.bind(InternetAddress.anyIPv4, 34343);
//这里要启用广播,重要
udpSocket.broadcastEnabled = true;

await for (var event in udpSocket) {
    if (RawSocketEvent.read == event) {
        var data = udpSocket.receive();
        var result = Utf8Codec().decode(data.data);
        print(result);
    }
}

//Client端
//要创建一个udp实例,必须指定一个端口,即使仅为客户端,端口任意
var client = await RawDatagramSocket.bind(InternetAddress.anyIPv4, 33333);
client.broadcastEnabled = true;
var helloBytes = utf8.encode("hello");
Future.doWhile(() async {
    await Future.delayed(Duration(seconds: 1));
    udpSocket.send(helloBytes, InternetAddress("255.255.255.255"), 34343);
    return true;
});

# dart之tcp通信

代码语言:javascript
复制
//Server端
main(List<String> args) async {
  var server = await ServerSocket.bind(InternetAddress.loopbackIPv4, 33333);
  print("start server....");
  await for (var socket in server) {
    acceptSocket(socket);
  }
}

//接受Client连接
acceptSocket(Socket socket) async {
  await for (var data in socket) {
    print("server:$data");
    send(socket, data);
  }
}

send(Socket socket, data) async {
  sleep(Duration(seconds: 3));
  try {
    socket.add(data);
    await socket.flush();
  } catch (e) {
    print(e);
  }
}

//Client端
main(List<String> args) async {
  var client = await Socket.connect(InternetAddress.loopbackIPv4, 33333);
  var helloBytes = utf8.encode("hello");
  client.add(helloBytes);
  await client.flush();
  
  await for (var data in client) {
    print("clinet:$data");
    send(client, data);
  }
}

send(Socket socket, data) async {
  sleep(Duration(seconds: 3));
  try {
    socket.add(data);
    await socket.flush();
  } catch (e) {
    print(e);
  }
}

# dart之tcp粘包扩展

最近写了一个文件传输工具需要对tcp进行粘包处理,所以实现了几个tcp粘包处理类。

package: d_socket

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # Dart Socket之TCP粘包
    • # 什么是TCP粘包
      • # dart中的socket
        • # dart之udp通信
      • # dart之tcp通信
        • # dart之tcp粘包扩展
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档