简体   繁体   中英

Sending Message Over TCP in Swift (NULL terminated)

I am using swift socket library with the following code:

let client:TCPClient = TCPClient(addr: "127.0.0.1", port: 8080)
var (success,errmsg)=client.connect(timeout: 1)
if success{
    var (success,errmsg)=client.send(str:"|~\0" )
    if success{
        let data=client.read(1024*10)
        if let d=data{
            if let str=String(bytes: d, encoding: NSUTF8StringEncoding){
                print(str)
            }
        }
    }else{
        print(errmsg)
    }
}else{
    print(errmsg)
}

The code works great but my problem is that my server gets the data without null-terminator, as you can see in the next link: https://gyazo.com/1a6576b515d37c9400a58ac67bfa2350 What can I do?

Presuming you are using this library , there is a bug in the implementation of TCPClient.send(str:) , as it uses strlen per this line . strlen will terminate at the first NUL character.

Change your code to:

 var (success, errmsg) = client.send(data:Array<UInt8>("|~\0".utf8))

and you should be good

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM