我写了一个C代码,它创建了一个套接字,到目前为止它工作正常.在RFC for TCP中,我发现可以发送FIN标志告诉其他主机我想要退出或谈话.FIN标志并不意味着其他主机无法发送更多数据.因此,在一个完美的世界中,我会发送FIN标志,另一个主机知道我不想再说话,他发送剩余的数据并在此之后关闭.但我怎么能发送FIN ??? close()函数对我来说或者更好地设置linux内核在放弃资源时所做的事情.但是放弃资源意味着我不能再使用recv()函数,因为当我调用close()函数时,内核会放弃文件描述符.那么如何在FIN标志之后读取其他主机可能要发送的其余数据呢?我打赌有一个干净的解决方案
我试图在go中构建一个base64编码的sha1哈希,但我得到的结果与其他编程语言的结果非常不同
package main
import (
"crypto/sha1"
"encoding/base64"
"fmt"
)
func main() {
c := sha1.New()
input := []byte("hello")
myBytes := c.Sum(input)
fmt.Println(base64.StdEncoding.EncodeToString(base64.StdPadding))
}
Run Code Online (Sandbox Code Playgroud)
此Go Code打印出来 aGVsbG/aOaPuXmtLDTJVv++VYBiQr9gHCQ==
我的Python代码看起来像这样
import hashlib
import base64
print(base64.b64encode(hashlib.sha1('hello').digest()))
Run Code Online (Sandbox Code Playgroud)
和输出 qvTGHdzF6KLavt4PO0gs2a6pQ00=
我的用于比较的bash命令看起来像这样
echo -n hello| openssl dgst -sha1 -binary |base64
Run Code Online (Sandbox Code Playgroud)
输出这个 qvTGHdzF6KLavt4PO0gs2a6pQ00=
这让我假设python代码正在做一切正确的事情.但为什么要打印另一个结果.我的错误在哪里?
Thnx提前