Translation

(itstool) path: imageobject/imagedata This is a reference to an external file such as an image or video. When the file changes, the md5 hash will change to let you know you need to update your localized copy. The msgstr is not used at all. Set it to whatever you like once you have updated your copy of the file.
_
external ref='sockets/sainserv' md5='__failed__'
48/480
Context English Persian State
We now know enough to write a very simple client, one that will get current time from <systemitem class="ipaddress">192.43.244.18</systemitem> and print it to <filename>stdout</filename>. اکنون برای نوشتن یک کارخواه بسیار ساده که زمان جاری را از <systemitem class="ipaddress">192.43.244.18</systemitem> می‌گیرد و بر روی <filename>stdout</filename> چاپ می‌کند به اندازهٔ کافی می‌دانیم.
/*
* daytime.c
*
* Programmed by G. Adam Stanislav
*/
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;netinet/in.h&gt;

int main() {
register int s;
register int bytes;
struct sockaddr_in sa;
char buffer[BUFSIZ+1];

if ((s = socket(PF_INET, SOCK_STREAM, 0)) &lt; 0) {
perror("socket");
return 1;
}

bzero(&amp;sa, sizeof sa);

sa.sin_family = AF_INET;
sa.sin_port = htons(13);
sa.sin_addr.s_addr = htonl((((((192 &lt;&lt; 8) | 43) &lt;&lt; 8) | 244) &lt;&lt; 8) | 18);
if (connect(s, (struct sockaddr *)&amp;sa, sizeof sa) &lt; 0) {
perror("connect");
close(s);
return 2;
}

while ((bytes = read(s, buffer, BUFSIZ)) &gt; 0)
write(1, buffer, bytes);

close(s);
return 0;
}
/*
* daytime.c
*
* Programmed by G. Adam Stanislav
*/
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;netinet/in.h&gt;

int main() {
register int s;
register int bytes;
struct sockaddr_in sa;
char buffer[BUFSIZ+1];

if ((s = socket(PF_INET, SOCK_STREAM, 0)) &lt; 0) {
perror("socket");
return 1;
}

bzero(&amp;sa, sizeof sa);

sa.sin_family = AF_INET;
sa.sin_port = htons(13);
sa.sin_addr.s_addr = htonl((((((192 &lt;&lt; 8) | 43) &lt;&lt; 8) | 244) &lt;&lt; 8) | 18);
if (connect(s, (struct sockaddr *)&amp;sa, sizeof sa) &lt; 0) {
perror("connect");
close(s);
return 2;
}

while ((bytes = read(s, buffer, BUFSIZ)) &gt; 0)
write(1, buffer, bytes);

close(s);
return 0;
}
Go ahead, enter it in your editor, save it as <filename>daytime.c</filename>, then compile and run it: بفرمایید، آن را در ویرایشگر خود وارد کنید، به‌عنوان <filename>daytime.c</filename> ذخیره کنید، سپس آن را همگردانی و اجرا کنید:
<prompt>%</prompt> <userinput>cc -O3 -o daytime daytime.c</userinput>
<prompt>%</prompt> <userinput>./daytime</userinput>

52079 01-06-19 02:29:25 50 0 1 543.9 UTC(NIST) *
<prompt>%</prompt>
<prompt>%</prompt> <userinput>cc -O3 -o daytime daytime.c</userinput>
<prompt>%</prompt> <userinput>./daytime</userinput>

52079 01-06-19 02:29:25 50 0 1 543.9 UTC(NIST) *
<prompt>%</prompt>
In this case, the date was June 19, 2001, the time was 02:29:25 <acronym>UTC</acronym>. Naturally, your results will vary. در این مورد، تاریخ ۱۹ ژوئن سال ۲۰۰۱، و زمان ۰۲:۲۹:۲۵ به وقت <acronym>UTC</acronym> بود. طبیعتاً، نتیجهٔ شما متفاوت خواهد بود.
Server Functions توابع کارساز
The typical server does not initiate the connection. Instead, it waits for a client to call it and request services. It does not know when the client will call, nor how many clients will call. It may be just sitting there, waiting patiently, one moment, The next moment, it can find itself swamped with requests from a number of clients, all calling in at the same time. کارساز عادی اتصال را شروع نمی‌کند. در عوض، منتظر کارخواه می‌ماند تا آن را فراخوانی کند و برای سرویس‌ها درخواست دهد. نمی‌داند چه زمان کارخواه فراخوانی می‌کند، یا اینکه چه تعداد کارخواه فراخوانی می‌کنند. ممکن است فقط یکجا بشیند، صبورانه منتظر بماند، یک لحظه، لحظهٔ بعدی، می‌تواند خودش را غرق در درخواست‌های تعدادی کارخواه ببیند، تمامشان در یک لحظه فراخوانی می‌کنند.
The sockets interface offers three basic functions to handle this. رابط سوکت‌ها سه تابع اساسی را برای مدیریت این موضوع ارائه می‌دهد.
<function>bind</function> <function>bind</function>
Ports are like extensions to a phone line: After you dial a number, you dial the extension to get to a specific person or department. درگاه‌ها مانند پسوندهای خط تلفن هستند: بعد از اینکه شماره‌ای را می‌گیرید، برای ارتباط با یک شخص یا بخش خاص پسوند آن را شماره‌گیری می‌کنید.
There are 65535 <acronym>IP</acronym> ports, but a server usually processes requests that come in on only one of them. It is like telling the phone room operator that we are now at work and available to answer the phone at a specific extension. We use <citerefentry><refentrytitle>bind</refentrytitle><manvolnum>2</manvolnum></citerefentry> to tell sockets which port we want to serve. ۶۵۵۳۵ درگاه <acronym>IP</acronym> وجود دارد، اما یک کارساز معمولاً درخواست‌هایی را که تنها بر روی یکی از آنها می‌آید را پردازش می‌کند. مانند این است که به گردانندهٔ اتاق تلفن بگوییم که الان مشغول به کار هستیم و با یک تلفن اضافی خاص قادر به پاسخگویی هستیم. از <citerefentry><refentrytitle>bind</refentrytitle><manvolnum>2</manvolnum></citerefentry> استفاده می‌کنیم تا به سوکت‌ها بگوییم به کدام درگاه خواهان خدمت‌دهی هستیم.
int bind(int s, const struct sockaddr *addr, socklen_t addrlen); int bind(int s, const struct sockaddr *addr, socklen_t addrlen);
Beside specifying the port in <varname>addr</varname>, the server may include its <acronym>IP</acronym> address. However, it can just use the symbolic constant <symbol>INADDR_ANY</symbol> to indicate it will serve all requests to the specified port regardless of what its <acronym>IP</acronym> address is. This symbol, along with several similar ones, is declared in <filename>netinet/in.h</filename> درکنار تعیین کردن درگاه در <varname>addr</varname>، کارساز ممکن است نشانی <acronym>IP</acronym> خود را اضافه کند. هرچند، می‌تواند فقط از مقدار ثابت نمادین <symbol>INADDR_ANY</symbol> استفاده کند تا نشان دهد به تمام درخواست‌هایی که به درگاهی مشخص می‌روند صرف نظر از نشانی <acronym>IP</acronym> آن خدمت‌دهی می‌کند. این نماد، در کنار تعدادی شبیه به خودش، در <filename>netinet/in.h</filename> اعلان شده است
#define INADDR_ANY (u_int32_t)0x00000000 #define INADDR_ANY (u_int32_t)0x00000000
Suppose we were writing a server for the <emphasis>daytime</emphasis> protocol over <acronym>TCP</acronym>/<acronym>IP</acronym>. Recall that it uses port 13. Our <varname>sockaddr_in</varname> structure would look like this: فرض کنید در حال نوشتن یک کارساز برای قرارداد <emphasis>روزهنگام</emphasis> بر روی <acronym>TCP</acronym>/<acronym>IP</acronym> بودیم. به‌یاد می‌آوریم که از درگاه ۱۳ استفاده می‌کند. ساختار <varname>sockaddr_in</varname> ما بدین شکل می‌شود:
_ external ref='sockets/sainserv' md5='__failed__' external ref='sockets/sainserv' md5='__failed__'
0 1 2 3
+--------+--------+--------+--------+
0 | 0 | 2 | 0 | 13 |
+--------+--------+--------+--------+
4 | 0 |
+-----------------------------------+
8 | 0 |
+-----------------------------------+
12 | 0 |
+-----------------------------------+
0 1 2 3
+--------+--------+--------+--------+
0 | 0 | 2 | 0 | 13 |
+--------+--------+--------+--------+
4 | 0 |
+-----------------------------------+
8 | 0 |
+-----------------------------------+
12 | 0 |
+-----------------------------------+
<imageobject> <imagedata fileref="sockets/sainserv"/> </imageobject> <textobject> <_:literallayout-1/> </textobject> <textobject> <phrase>Example Server sockaddr_in</phrase> </textobject> <imageobject> <imagedata fileref="sockets/sainserv"/> </imageobject> <textobject> <_:literallayout-1/> </textobject> <textobject> <phrase>نمونهٔ کارساز sockaddr_in</phrase> </textobject>
<function>listen</function> <function>listen</function>
To continue our office phone analogy, after you have told the phone central operator what extension you will be at, you now walk into your office, and make sure your own phone is plugged in and the ringer is turned on. Plus, you make sure your call waiting is activated, so you can hear the phone ring even while you are talking to someone. در ادامهٔ قیاس تلفن دفتر، پس از آنکه موقعیت تلفن اضافی‌ای که در آن قرار دارید را به گردانندهٔ مرکزی تلفن اعلام کردید، اکنون وارد دفترتان می‌شوید، و مطمئن می‌شوید که تلفتنتان وصل و صدای زنگش روشن است. همچنین، مطمئن می‌شوید انتظار تماستان فعال است، در نتیجه می‌توانید زنگ تلفن را حتی زمانی‌که در حال مکالمه هستید نیز بشنوید.
The server ensures all of that with the <citerefentry><refentrytitle>listen</refentrytitle><manvolnum>2</manvolnum></citerefentry> function. کارساز از همهٔ آن مراحل توسط تابع <citerefentry><refentrytitle>listen</refentrytitle><manvolnum>2</manvolnum></citerefentry> اطمینان حاصل می‌کند.
int listen(int s, int backlog); int listen(int s, int backlog);
In here, the <varname>backlog</varname> variable tells sockets how many incoming requests to accept while you are busy processing the last request. In other words, it determines the maximum size of the queue of pending connections. در اینجا، هنگامی‌که شما مشغول پردازش آخرین درخواست هستید، متغیر <varname>backlog</varname> به سوکت‌ها می‌گوید چه تعداد درخواست ورودی را بپذیرد. به بیان دیگر، اندازه حداکثری صف‌ اتصالات معلق را اندازه‌گیری می‌کند.
<function>accept</function> <function>accept</function>
After you hear the phone ringing, you accept the call by answering the call. You have now established a connection with your client. This connection remains active until either you or your client hang up. بعد از اینکه صدای زنگ تلفن را می‌شنوید، تماس را با پاسخ دادن به آن قبول می‌کنید. اینک شما یک ارتباط با کراخواه خود برقرار کرده‌اید. این ارتباط تا زمانی که توسط یا شما یا کارخواه شما خاتمه نیابد فعال باقی می‌ماند.
The server accepts the connection by using the <citerefentry><refentrytitle>accept</refentrytitle><manvolnum>2</manvolnum></citerefentry> function. کارساز اتصال را با استفاده از تابع <citerefentry><refentrytitle>accept</refentrytitle><manvolnum>2</manvolnum></citerefentry> می‌پذیرد.
int accept(int s, struct sockaddr *addr, socklen_t *addrlen); int accept(int s, struct sockaddr *addr, socklen_t *addrlen);
Note that this time <varname>addrlen</varname> is a pointer. This is necessary because in this case it is the socket that fills out <varname>addr</varname>, the <varname>sockaddr_in</varname> structure. توجه داشته باشید که این بار <varname>addrlen</varname> یک اشاره‌گر است. این لازم است زیرا در این مورد سوکت است که <varname>addr</varname> را پر می‌کند، ساختار <varname>sockaddr_in</varname>.
The return value is an integer. Indeed, the <function>accept</function> returns a <emphasis>new socket</emphasis>. You will use this new socket to communicate with the client. مقدار بازگشتی یک عدد صحیح است. در واقع، <function>accept</function> یک <emphasis>سوکت جدید</emphasis> را برمی‌گرداند. شما این سوکت جدید را برای ارتباط با کارخواه به‌کار خواهید برد.
What happens to the old socket? It continues to listen for more requests (remember the <varname>backlog</varname> variable we passed to <function>listen</function>?) until we <function>close</function> it. چه بر سر سوکت سابق می‌آید؟ به استماع برای درخواست‌های بیشتر ادامه می‌دهد (متغیر <varname>backlog</varname> را که به تابع <function>listen</function> دادیم به یاد دارید؟) تا ما آن را <function>close</function> کنیم.
Now, the new socket is meant only for communications. It is fully connected. We cannot pass it to <function>listen</function> again, trying to accept additional connections. اکنون، سوکت جدید تنها برای ارتباطات استفاده می‌شود. به‌طور کامل متصل شده است. نمی‌توانیم آن را دوباره به <function>listen</function> بدهیم، و سعی کنیم اتصالات جدید را بپذیریم.

Loading…

external ref='sockets/sainserv' md5='__failed__'
external ref='sockets/sainserv' md5='__failed__'
2 months ago
Browse all component changes

Things to check

Unchanged translation

Source and translation are identical

Reset

Glossary

English Persian
No related strings found in the glossary.

Source information

Context
_
Source string comment
(itstool) path: imageobject/imagedata This is a reference to an external file such as an image or video. When the file changes, the md5 hash will change to let you know you need to update your localized copy. The msgstr is not used at all. Set it to whatever you like once you have updated your copy of the file.
Source string location
book.translate.xml:5907
String age
4 months ago
Source string age
a year ago
Translation file
books/fa/developers-handbook.po, string 973