@@ -8,7 +8,7 @@ msgstr ""
8
8
"Project-Id-Version : Python 3.12\n "
9
9
"Report-Msgid-Bugs-To : \n "
10
10
"POT-Creation-Date : 2022-06-10 00:16+0000\n "
11
- "PO-Revision-Date : 2023-07-12 02:22 +0800\n "
11
+ "PO-Revision-Date : 2023-07-19 20:17 +0800\n "
12
12
"
Last-Translator :
Jay <[email protected] >\n "
13
13
"Language-Team : Chinese - TAIWAN (https://github.com/python/python-docs-zh- "
14
14
"tw)\n "
@@ -180,8 +180,8 @@ msgid ""
180
180
"should be plenty."
181
181
msgstr ""
182
182
"最後,``listen`` 引數告訴 socket 函式庫 (library),我們希望在佇列 (queue) 中"
183
- "累積達 5 個(正常的最大值)連接請求後再拒絕外部連接。如果其餘的程式碼編寫正 "
184
- "確 ,這應該足夠了。"
183
+ "累積達 5 個(正常的最大值)連線請求後再拒絕外部連線。如果其餘的程式碼編寫 "
184
+ "正確 ,這應該足夠了。"
185
185
186
186
#: ../../howto/sockets.rst:95
187
187
msgid ""
@@ -212,12 +212,21 @@ msgstr ""
212
212
"``clientsocket`` 、建立一個新行程 (process) 來處理 ``clientsocket``,或者將這"
213
213
"個程式重新改寫成使用非阻塞 socket,並使用 ``select`` 在我們的「伺服器端」"
214
214
"socket 和任何有效的 ``clientsocket`` 之間進行多工處理。稍後將會更詳細的介紹。"
215
+ <<<<<<< HEAD
215
216
"現在最重要的是理解:這就是「伺服器端」socket 做的\\ *所有* \\事情。它不會發送"
216
217
"任何資料、也不接收任何資料,它只會建立「伺服器端」socket。每個 "
217
218
"``clientsocket`` 都是為了回應某些\\ *其他* \\ ``connect()`` 到我們綁定的主機"
218
219
"上的「用戶端」socket。一但 ``clientsocket`` 建立完成,就會繼續監聽更多的連接"
219
220
"請求。兩個「用戶端」可以隨意的通訊 - 它們使用的是一些動態分配的連接埠,會在通"
220
221
"訊結束的時候被回收並重新利用。"
222
+ =======
223
+ "現在最重要的是理解:這就是「伺服器端」socket 做的\\ *所有* \\事情。它不會發送任何"
224
+ "資料、也不接收任何資料,它只會建立「伺服器端」socket。每個 ``clientsocket`` "
225
+ "都是為了回應某些\\ *其他* \\ ``connect()`` 到我們綁定的主機上的「用戶端」socket。"
226
+ "一但 ``clientsocket`` 建立完成,就會繼續監聽更多的連線請求。兩個「用戶端」可"
227
+ "以隨意的通訊 - 它們使用的是一些動態分配的連接埠,會在通訊結束的時候被回收並重新"
228
+ "利用。"
229
+ >>>>>>> 445d5a27 (docs(howto/sockets.po): 翻譯 `IPC` 與 `Using a Socket` 區塊 (#493))
221
230
222
231
#: ../../howto/sockets.rst:121
223
232
msgid "IPC"
@@ -231,16 +240,20 @@ msgid ""
231
240
"a shortcut around a couple of layers of network code and be quite a bit "
232
241
"faster."
233
242
msgstr ""
243
+ "如果你需要在一台機器上的兩個行程間進行快速的行程間通訊 (IPC),你應該考慮使用"
244
+ "管道 (pipes) 或共享記憶體 (shared memory)。如果你確定要使用 AF_INET sockets,"
245
+ "請將「伺服器端」socket 綁定到 ``'localhost'``。在大多數平台上,這樣將會繞過幾個"
246
+ "網路程式碼層,並且速度會更快一些。"
234
247
235
248
#: ../../howto/sockets.rst:129
236
249
msgid ""
237
250
"The :mod:`multiprocessing` integrates cross-platform IPC into a higher-level "
238
251
"API."
239
- msgstr ""
252
+ msgstr ":mod:`multiprocessing` 將跨平台的行程間通訊整合到更高層的 API 中。 "
240
253
241
254
#: ../../howto/sockets.rst:134
242
255
msgid "Using a Socket"
243
- msgstr ""
256
+ msgstr "使用一個 Socket "
244
257
245
258
#: ../../howto/sockets.rst:136
246
259
msgid ""
@@ -252,6 +265,10 @@ msgid ""
252
265
"in a request, or perhaps a signon. But that's a design decision - it's not a "
253
266
"rule of sockets."
254
267
msgstr ""
268
+ "首先需要注意,網頁瀏覽器的「用戶端」socket 和網路伺服器的「用戶端」socket 是"
269
+ "非常類似的。也就是說,這是一個「點對點 (peer to peer)」的通訊方式,或者也可以說\\ *作為設計"
270
+ "者,你必須決定通訊的規則*。通常情況下,``connect`` 的 socket 會通過發送一個"
271
+ "請求或者信號來開始一次通訊。但這屬於設計決策,而不是 socket 的規則。"
255
272
256
273
#: ../../howto/sockets.rst:143
257
274
msgid ""
@@ -264,6 +281,12 @@ msgid ""
264
281
"reply. Without a ``flush`` in there, you may wait forever for the reply, "
265
282
"because the request may still be in your output buffer."
266
283
msgstr ""
284
+ "現在有兩組可供通訊使用的動詞。你可以使用 ``send`` 和 ``recv``,或者可以將用戶"
285
+ "端 socket 轉換成類似檔案的形式,並使用 ``read`` 和 ``write``。後者是 Java 中"
286
+ "呈現 socket 的方式。我不打算在這裡討論它,只是提醒你需要在 socket 上使用 "
287
+ "``flush``。這些是緩衝的「檔案」,一個常見的錯誤是使用 ``write`` 寫入某些內"
288
+ "容,然後直接 ``read`` 回覆。如果不使用 ``flush``,你可能會一直等待這個回覆,"
289
+ "因為請求可能還在你的輸出緩衝中。"
267
290
268
291
#: ../../howto/sockets.rst:152
269
292
msgid ""
@@ -275,6 +298,11 @@ msgid ""
275
298
"you how many bytes they handled. It is *your* responsibility to call them "
276
299
"again until your message has been completely dealt with."
277
300
msgstr ""
301
+ "現在我們來到 sockets 的主要障礙 - ``send`` 和 ``recv`` 操作的是網路緩衝區。他"
302
+ "們不一定會處理你提供給它們的所有位元組(或者是你期望它處理的位元組),因為它"
303
+ "們主要的重點是處理網路緩衝區。一般來說,它們會在關聯的網路衝區已滿 "
304
+ "(``send``) 或已清空 (``recv``) 時回傳,然後告訴你它們處理了多少位元組。*你"
305
+ "* \\ 的責任是一直呼叫它們直到你所有的訊息處理完成。"
278
306
279
307
#: ../../howto/sockets.rst:160
280
308
msgid ""
@@ -283,13 +311,19 @@ msgid ""
283
311
"data on this connection. Ever. You may be able to send data successfully; "
284
312
"I'll talk more about this later."
285
313
msgstr ""
314
+ "當 ``recv`` 回傳「零位元組 (0 bytes)」時,就表示另一端已經關閉(或著正在關"
315
+ "閉)連線。你再也不能從這個連線上取得任何資料了。你可能還是可以成功發送資料;"
316
+ "我稍後會對此進行更詳細的解釋。"
286
317
287
318
#: ../../howto/sockets.rst:165
288
319
msgid ""
289
320
"A protocol like HTTP uses a socket for only one transfer. The client sends a "
290
321
"request, then reads a reply. That's it. The socket is discarded. This means "
291
322
"that a client can detect the end of the reply by receiving 0 bytes."
292
323
msgstr ""
324
+ "像 HTTP 這樣的協議只使用一個 socket 進行一次傳輸,用戶端發送一個請求,然後讀"
325
+ "取一個回覆。就這樣,然後這個 socket 就會被銷毀。這表示者用戶端可以通過接收「零"
326
+ "位元組」來檢測回覆的結束。"
293
327
294
328
#: ../../howto/sockets.rst:169
295
329
msgid ""
@@ -304,12 +338,23 @@ msgid ""
304
338
"they are* (much better), *or end by shutting down the connection*. The "
305
339
"choice is entirely yours, (but some ways are righter than others)."
306
340
msgstr ""
341
+ "但是如果你打算在之後的傳輸中重新利用 socket 的話,你需要明白\\ *socket 中是不"
342
+ "存在* \\ :abbr:`EOT (傳輸結束)`。重申一次:如果一個 socket 的 ``send`` 或 "
343
+ "``recv`` 處理了「零位元組」後回傳,表示連線已經斷開。如果連線\\ *沒有* \\ 斷"
344
+ "開,你可能會永遠處於等待 ``recv`` 的狀態,因為(就目前來說)socket *不會* "
345
+ "\\ 告訴你沒有更多資料可以讀取了。現在,如果你稍微思考一下,你就會意識到 "
346
+ "socket 的一個基本事實:*訊息要麼是一個固定的長度(不好的做法),要麼是可以被"
347
+ "分隔的(普通的做法),要麼是指定其長度(更好地做法),要麼通過關閉連線來結"
348
+ "束。*\\ 完全由你來決定要使用哪種方式(但有些方法比其他方法來的更好)。"
307
349
308
350
#: ../../howto/sockets.rst:180
309
351
msgid ""
310
352
"Assuming you don't want to end the connection, the simplest solution is a "
311
353
"fixed length message::"
312
354
msgstr ""
355
+ "假設你不想結束連線,最簡單的方式就是使用固定長度的訊息:\n"
356
+ "\n"
357
+ "::"
313
358
314
359
#: ../../howto/sockets.rst:217
315
360
msgid ""
@@ -319,6 +364,10 @@ msgid ""
319
364
"gets more complex. (And in C, it's not much worse, except you can't use "
320
365
"``strlen`` if the message has embedded ``\\ 0``\\ s.)"
321
366
msgstr ""
367
+ "發送部分的程式碼幾乎可用於任何訊息的傳送方式 - 在 Python 中你發送一個字串,可"
368
+ "以用 ``len()`` 來確認他的長度(即使字串包含了 ``\\ 0`` 字元)。在這裡,主要是"
369
+ "接收的程式碼變得更複雜一些。(在 C 語言中,情況沒有變得更糟,只是如果訊息中包"
370
+ "含了 ``\\ 0`` 字元,你就不能使用 ``strlen`` 函式。)"
322
371
323
372
#: ../../howto/sockets.rst:223
324
373
msgid ""
@@ -330,6 +379,11 @@ msgid ""
330
379
"chunk size, (4096 or 8192 is frequently a good match for network buffer "
331
380
"sizes), and scanning what you've received for a delimiter."
332
381
msgstr ""
382
+ "最簡單的改進方法是將訊息的第一個字元表示訊息的類型,並根據訊息的類型來決定訊"
383
+ "息的長度。現在你需要使用兩次 ``recv`` - 第一次用於接收(至少)第一個字元來得"
384
+ "知長度,第二次用於在迴圈中接收剩下的訊息。如果你決定使用分隔符號的方式,你將會"
385
+ "以某個任意的區塊大小進行接收(4096 或 8192 通常是網路緩衝區大小的良好選擇),"
386
+ "並在收到的內容中掃描分隔符號。"
333
387
334
388
#: ../../howto/sockets.rst:231
335
389
msgid ""
@@ -339,6 +393,9 @@ msgid ""
339
393
"of a following message. You'll need to put that aside and hold onto it, "
340
394
"until it's needed."
341
395
msgstr ""
396
+ "需要注意的一個複雜情況是,如果你的通訊協議允許連續發送多個訊息(沒有任何回"
397
+ "應),並且你傳遞給 ``recv`` 函式一個任意的區塊大小,最後有可能讀取到下一"
398
+ "條訊息的開頭。你需要將其放在一旁並保留下來,直到需要使用的時候。"
342
399
343
400
#: ../../howto/sockets.rst:237
344
401
msgid ""
@@ -351,13 +408,21 @@ msgid ""
351
408
"not always manage to get rid of everything in one pass. And despite having "
352
409
"read this, you will eventually get bit by it!"
353
410
msgstr ""
411
+ "使用長度作為訊息的前綴(例如,使用 5 個數字字元表示)會變得更複雜,因為(信不"
412
+ "信由你)你可能無法在一次 ``recv`` 中獲得所有 5 個字元。在一般使用下,可能不會"
413
+ "有這個狀況,但在高負載的網路下,除非使用兩個 ``recv`` (第一個用於確定長度,"
414
+ "第二個用於取得訊息的資料部分),否則你的程式碼很快就會出現錯誤。這令人非常頭"
415
+ "痛。同樣的情況也會讓你發現 ``send`` 並不總能在一次傳輸中完全清除所有內容。儘"
416
+ "管已經閱讀了這篇文章,但最終還是無法解決!"
354
417
355
418
#: ../../howto/sockets.rst:246
356
419
msgid ""
357
420
"In the interests of space, building your character, (and preserving my "
358
421
"competitive position), these enhancements are left as an exercise for the "
359
422
"reader. Lets move on to cleaning up."
360
423
msgstr ""
424
+ "為了節省篇幅、培養你的技能(並保持我的競爭優勢),這些改進方法留給讀者自行練"
425
+ "習。現在讓我們開始進行清理工作。"
361
426
362
427
#: ../../howto/sockets.rst:252
363
428
msgid "Binary Data"
0 commit comments