77# Fei Yin <[email protected] >, 201888# Junkai Shao <[email protected] >, 201899# ww song <[email protected] >, 201810+ # Freesand Leo <[email protected] >, 20181011# keelii <[email protected] >, 201911- # Freesand Leo <yuqinju@163 .com>, 2019
12+ # Meng Du <alphanow@gmail .com>, 2019
1213#
1314#, fuzzy
1415msgid ""
@@ -17,7 +18,7 @@ msgstr ""
1718"Report-Msgid-Bugs-To : \n "
1819"POT-Creation-Date : 2019-01-01 10:14+0900\n "
1920"PO-Revision-Date : 2017-02-16 17:46+0000\n "
20- "Last-Translator : Freesand Leo <yuqinju@163 .com>, 2019\n "
21+ "Last-Translator : Meng Du <alphanow@gmail .com>, 2019\n "
2122"Language-Team : Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n "
2223"MIME-Version : 1.0\n "
2324"Content-Type : text/plain; charset=UTF-8\n "
@@ -50,7 +51,7 @@ msgid ""
5051"a lot of them), but I hope it will give you enough background to begin using"
5152" them decently."
5253msgstr ""
53- "套接字几乎无处不在,但是它却是被误解最严重的技术之一。这是一篇简单的套接字概述。并不是一篇真正的教程 - "
54+ "套接字几乎无处不在,但是它却是被误解最严重的技术之一。这是一篇简单的套接字概述。并不是一篇真正的教程 —— "
5455"你需要做更多的事情才能让它工作起来。其中也并没有涵盖细节(细节会有很多),但是我希望它能提供足够的背景知识,让你像模像样的开始使用套接字"
5556
5657#: ../../howto/sockets.rst:20
@@ -244,10 +245,10 @@ msgid ""
244245"reply. Without a ``flush`` in there, you may wait forever for the reply, "
245246"because the request may still be in your output buffer."
246247msgstr ""
247- "现在有两组用于通信的动词。你可以使用 ``send`` 和 ``recv``,或者你可以把客户端套接字改成文件类型的怪东西来使用 ``read`` 和"
248- " ``write`` 方法。后者是 Java 语言中表示套接字的方法,在这儿我将不会讨论这个 ,但是要提醒你需要调用套接字的 ``flush`` "
249- "方法,这些是缓冲区的文件, 一个经常出现的错误是 ``write`` 一些东西,然后不调用 ``flush`` 就开始 `` read`` "
250- "一个响应,你可能会为了这个响应一直等待 ,因为请求可能还在你的输出缓冲中。"
248+ "现在有两组用于通信的动词。你可以使用 ``send`` 和 ``recv`` ,或者你可以把客户端套接字改成文件类型的形式来使用 ``read`` 和"
249+ " ``write`` 方法。后者是 Java 语言中表示套接字的方法,我将不会在这儿讨论这个 ,但是要提醒你需要调用套接字的 ``flush`` "
250+ "方法。这些是“缓冲”的文件, 一个经常出现的错误是 ``write`` 一些东西,然后就直接开始 ``read`` 一个响应。如果不调用 "
251+ "``flush`` ,你可能会一直等待这个响应 ,因为请求可能还在你的输出缓冲中。"
251252
252253#: ../../howto/sockets.rst:152
253254msgid ""
@@ -314,9 +315,9 @@ msgid ""
314315"gets more complex. (And in C, it's not much worse, except you can't use "
315316"``strlen`` if the message has embedded ``\\ 0``\\ s.)"
316317msgstr ""
317- "发送分部代码几乎可用于任何消息传递方案 - 在 Python 中你发送字符串,可以使用 ``len()`` 方法来确定它的长度(即使它嵌入了 `` \\ "
318- "0`` 字符)。 主要是接收代码变得更复杂。(在 C 语言中,并没有太糟糕 ,除非消息嵌入了 ``\\ 0`` 字符而且你又无法使用 ``strlen`` "
319- ")"
318+ "发送分部代码几乎可用于任何消息传递方案 —— 在 Python 中你发送字符串,可以使用 ``len()`` 方法来确定它的长度(即使它嵌入了 "
319+ "`` \\ 0`` 字符), 主要是接收代码变得更复杂。(在 C 语言中,并没有更糟糕 ,除非消息嵌入了 ``\\ 0`` 字符而且你又无法使用 "
320+ "``strlen`` )"
320321
321322#: ../../howto/sockets.rst:223
322323msgid ""
@@ -328,8 +329,8 @@ msgid ""
328329"chunk size, (4096 or 8192 is frequently a good match for network buffer "
329330"sizes), and scanning what you've received for a delimiter."
330331msgstr ""
331- "最简单的改进是让消息的第一个字符表示消息类型,由类型决定长度。现在你需要两次 ``recv`` - "
332- "第一次取首字符来知晓长度 ,第二次在循环中获取剩余所有的消息。如果你决定到分界线,你将收到一些任意大小的块,(4096 或者 8192 "
332+ "最简单的改进是让消息的第一个字符表示消息类型,由类型决定长度。现在你需要两次 ``recv``\\ - "
333+ "第一次取(至少)第一个字符来知晓长度 ,第二次在循环中获取剩余所有的消息。如果你决定到分界线,你将收到一些任意大小的块,(4096 或者 8192 "
333334"通常是比较合适的网络缓冲区大小),扫描你接收到的分界符"
334335
335336#: ../../howto/sockets.rst:231
@@ -354,17 +355,17 @@ msgid ""
354355"not always manage to get rid of everything in one pass. And despite having "
355356"read this, you will eventually get bit by it!"
356357msgstr ""
357- "用消息的长度做为消息的前缀(比如说,5个数字字符)会更复杂 ,因为,你可能在一次 ``recv`` 中没法取完这 5 "
358- "个字符,为了能把程序跑起来,你将设法避免这种情况;但是在高负载的网络中 ,除非你使用两个``recv`` 循环 - "
359- "第一个用来确定消息长度,第二个用来获取消息体的数据,否则你的代码会很快中断。真讨厌,这也是当你发现 ``send`` "
360- "方法并不总是在一个地方处理所有的东西的感觉。尽管你读过这篇文章 ,但最终还是会有所了解"
358+ "以其长度(例如,作为5个数字字符)作为消息前缀时会变得更复杂 ,因为(信不信由你)你可能无法在一个 ``recv`` "
359+ "中获得所有5个字符。在一般使用时,你会侥幸避免该状况;但是在高网络负载中 ,除非你使用两个 ``recv`` 循环,否则你的代码将很快中断 —— "
360+ "第一个用于确定长度,第二个用于获取消息的数据部分。这很讨厌。当你发现 ``send`` 并不总是设法在支持搞定一切时,你也会有这种感觉。 "
361+ "尽管已经阅读过这篇文章 ,但最终还是会有所了解! "
361362
362363#: ../../howto/sockets.rst:246
363364msgid ""
364365"In the interests of space, building your character, (and preserving my "
365366"competitive position), these enhancements are left as an exercise for the "
366367"reader. Lets move on to cleaning up."
367- msgstr "限于篇幅,建立你的角色,(保持与我的竞争位置),这些改进将留给读者做为练习。让我们继续 。"
368+ msgstr "限于篇幅,建立你的角色,(保持与我的竞争位置),这些改进将留给读者做为练习。现在让我们继续 。"
368369
369370#: ../../howto/sockets.rst:252
370371msgid "Binary Data"
@@ -382,7 +383,7 @@ msgid ""
382383"network order is host order, these do nothing, but where the machine is "
383384"byte-reversed, these swap the bytes around appropriately."
384385msgstr ""
385- "通过套接字传送二进制数据是可能的 。主要问题在于并非所有机器都用同样的二进制数据格式。比如 Motorola 芯片用两个十六进制字节 00 01 "
386+ "通过套接字传送二进制数据是可行的 。主要问题在于并非所有机器都用同样的二进制数据格式。比如 Motorola 芯片用两个十六进制字节 00 01 "
386387"来表示一个 16 位整数值 1。而 Intel 和 DEC 则会做字节反转 —— 即用 01 00 来表示 1。套接字库要求转换 16 位和 32 "
387388"位整数 —— ``ntohl, htonl, ntohs, htons`` 其中的「n」表示 *network*,「h」表示 *host*,「s」表示 "
388389"*short*,「l」表示 *long*。在网络序列就是主机序列时它们什么都不做,但是如果机器是字节反转的则会适当地交换字节序。"
@@ -413,10 +414,9 @@ msgid ""
413414"same as ``shutdown(); close()``. So in most situations, an explicit "
414415"``shutdown`` is not needed."
415416msgstr ""
416- "严格地讲,你应该在 ``close`` 它之前将套接字 ``shutdown``。 ``shutdown`` 是套接字另一端的一种建议。 "
417- "调用时参数不同意义也不一样,它可能意味着「我不会再发送了,但我仍然会监听」,或者「我没有监听了,真棒!」。 "
418- "然而,大多数套接字库或者程序员都习惯了忽略使用这种礼节,因为通常情况下 ``close`` 与 ``shutdown(); close();`` "
419- "是一样的。所以在大多数情况下,不需要显式的 ``shutdown``。"
417+ "严格地讲,你应该在 ``close`` 它之前将套接字 ``shutdown`` 。 ``shutdown`` "
418+ "是发送给套接字另一端的一种建议。调用时参数不同意义也不一样,它可能意味着「我不会再发送了,但我仍然会监听」,或者「我没有监听了,真棒!」。然而,大多数套接字库或者程序员都习惯了忽略使用这种礼节,因为通常情况下"
419+ " ``close`` 与 ``shutdown(); close()`` 是一样的。所以在大多数情况下,不需要显式的 ``shutdown`` 。"
420420
421421#: ../../howto/sockets.rst:282
422422msgid ""
@@ -427,6 +427,9 @@ msgid ""
427427"complete request. The server sends a reply. If the ``send`` completes "
428428"successfully then, indeed, the client was still receiving."
429429msgstr ""
430+ "高效使用 ``shutdown`` 的一种方法是在类似 HTTP 的交换中。客户端发送请求,然后执行 ``shutdown(1)`` 。 "
431+ "这告诉服务器“此客户端已完成发送,但仍可以接收”。服务器可以通过接收 0 字节来检测 “EOF” 。它可以假设它有完整的请求。服务器发送回复。如果 "
432+ "``send`` 成功完成,那么客户端仍在接收。"
430433
431434#: ../../howto/sockets.rst:289
432435msgid ""
@@ -437,6 +440,9 @@ msgid ""
437440"indefinitely, thinking you're just being slow. *Please* ``close`` your "
438441"sockets when you're done."
439442msgstr ""
443+ "Python 进一步自动关闭,并说当一个套接字被垃圾收集时,如果需要它会自动执行 ``close`` "
444+ "。但依靠这个机制是一个非常坏的习惯。如果你的套接字在没有 ``close`` "
445+ "的情况下就消失了,那么另一端的套接字可能会无限期地挂起,以为你只是慢了一步。完成后 *请* ``close`` 你的套接字。"
440446
441447#: ../../howto/sockets.rst:297
442448msgid "When Sockets Die"
@@ -456,6 +462,9 @@ msgid ""
456462" automatic recycling of resources. In other words, if you do manage to kill "
457463"the thread, your whole process is likely to be screwed up."
458464msgstr ""
465+ "使用阻塞套接字最糟糕的事情可能就是当另一边下线时(没有 ``close`` )会发生什么。你的套接字可能会挂起。 TCP "
466+ "是一种可靠的协议,它会在放弃连接之前等待很长时间。如果你正在使用线程,那么整个线程基本上已经死了。你无能为力。只要你没有做一些愚蠢的事情,比如在进行阻塞读取时持有一个锁,那么线程并没有真正消耗掉资源。"
467+ " *不要* 尝试杀死线程 —— 线程比进程更有效的部分原因是它们避免了与自动回收资源相关的开销。换句话说,如果你设法杀死线程,你的整个进程很可能被搞坏。"
459468
460469#: ../../howto/sockets.rst:313
461470msgid "Non-blocking Sockets"
0 commit comments