我正在使用這段代碼來監聽一個埠:
據我所知,套接字與位元組的互動是原封不動的。我想找到一種方法,將這些位元組(本質上是SQL請求)轉換成字串。我怎樣才能做到這一點呢,前提是輸入是UTF-8,這是一個使用可變大小的編碼?
uj5u.com熱心網友回復: 試一下: import std.exception: assumeUnique; string s = assumeUnique (cast(char[])ubyteArray); uj5u.com熱心網友回復: 你在這里似乎有幾個問題。 我如何從位元組中獲取字符? 我如何從位元組中獲取字符?
用 用int start()
int start(){
ushort port = 61888;
listener = new TcpSocket();
assert(listener.isAlive)。
listener.blocking = false;
listener.bind(new InternetAddress(port))。
listener.listen(10);
writefln("Listening on port %d.", port)。
enum MAX_CONNECTIONS = 60;
auto socketSet = new SocketSet(MAX_CONNECTIONS 1);
Socket[] 讀取。
while (true)
{
socketSet.add( listener);
foreach (sock; reads)
socketSet.add(sock);
Socket.select(socketSet, null, null)。
}
回傳0。
}
cast(char[])st來cast它們。這是對位元組的別名,給你一個完全相同的資料片,并且不需要新的分配。你還沒有假設這些位元組是有效的UTF-8,但是如果它們不是,自動解碼或你程式的其他部分可能會抱怨。如果你想的話,你可以通過std.utf.validate來運行它。std.string.assumeUTF(st)做基本相同的事情,它至少也對無效的UTF進行斷言,僅在除錯構建中。
我如何從char[]中獲取一個字串?
你可以用std.exception.assumeUnique(st)不安全地別名char[],或者你可以用st.idup或std.utf.toUTF8(st)分配一個不可變的副本。
如果我的固定位元組緩沖區包含無效的UTF-8 -- 因為它被切斷了怎么辦?
如果這是一個風險,你可以使用低級別的std.utf工具(decodeFront和捕捉UTFException是一種方法)來剝離有效的UTF-8,然后檢查你是否有剩余的位元組,或者檢查輸入的末端是否為有效的UTF-8。
我如何知道我的固定緩沖區套接字I/O是否得到了一個完整的SQL陳述句?
你可以定義一個網路協議,其中包括陳述句大小等資訊,或者有你可以讀取的 "陳述句結束 "標記,而不是僅僅在線路上傳遞原始 SQL 陳述句。
我有一個cheat sheet,用于字串型別轉換,它鏈接到一個更復雜的unittests檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/328680.html
標籤:
上一篇:如何驗證100以下的用戶輸入
