socket作為服務(wù)端
直接上代碼
static Socket mSocket;
static initSocket() async{
String host="192.168.1.6";
int port=50001;
var server=await ServerSocket.bind(host, port);
await for(var socket in server) {
socket.listen(dataHandler,
onError: errorHandler,
onDone: doneHandler,
cancelOnError:false);
mSocket=socket;
//將向socket客戶端發(fā)送命令傳到寫方法里進行轉(zhuǎn)換
dataWrite(***);
//周期定時器
setTimeStart();
}
}
///發(fā)送命令
static void dataWrite(data) async{
mSocket.add(***);// ***是list<int>格式的數(shù)據(jù)
//也有mSocket.write()等方法,挑選適合的放松方式
}
///接收報文
static void dataHandler(data){
try {
print('接收到的數(shù)據(jù)${data}');
if(data is List) {
print('is List');
} else if (data is int) {
print('${data} is int');
} else if (data is double) {
print('${data} is double');
} else {
print('${data} is other type');
}
} catch (e) {
print(e);
}
mSocket.flush();
}
///socket捕獲異常
static void errorHandler(error, StackTrace trace){
print("-***********"+error);
}
///socket關(guān)閉處理
static void doneHandler(){
mSocket.destroy();
}
socket作為客戶端
監(jiān)聽的方法與服務(wù)端是一樣的
直接上代碼:
await Socket.connect(host,port).then((Socket socket) {
mSocket = socket;
mSocket.listen(dataHandler,
onError: errorHandler,
onDone: doneHandler,
cancelOnError:false
);
if(socket!=null){
dataWrite(***);
}
}).catchError((e) {
print("無法連接:$e");
});