⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000006.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 5 页
字号:
&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;gethostname(char&nbsp;*hostname,&nbsp;size_t&nbsp;size);&nbsp;<BR>参数很简单:hostname&nbsp;是一个字符数组指针,他将在函数返回时保存主机名。size&nbsp;是&nbsp;<BR>&nbsp;hostname&nbsp;数组的字节长度。&nbsp;<BR>函数调用成功时返回&nbsp;0,失败时返回&nbsp;-1,并设置&nbsp;errno。&nbsp;<BR>DNS--You&nbsp;say&nbsp;&quot;whitehouse.gov&quot;,&nbsp;I&nbsp;say&nbsp;&quot;198.137.240.100&quot;&nbsp;<BR>如果你不知道&nbsp;DNS&nbsp;的意思,那么我告诉你,他代表&quot;域名服务&nbsp;(Domain&nbsp;Name&nbsp;<BR>Service)&quot;。他主要的功能是:你给他一个容易记忆的某站点的地址,他给你&nbsp;IP&nbsp;地址(&nbsp;<BR>然后你就可以使用&nbsp;bind(),&nbsp;connect(),&nbsp;<BR>sendto()&nbsp;或者其他函数。)当一个人输入:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;$&nbsp;telnet&nbsp;whitehouse.gov&nbsp;<BR>telnet&nbsp;能知道他将连接&nbsp;(connect())&nbsp;到&nbsp;&quot;198.137.240.100&quot;。&nbsp;<BR>但是这是如何工作的呢?&nbsp;你可以调用函数&nbsp;gethostbyname():&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;netdb.h&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;hostent&nbsp;*gethostbyname(const&nbsp;char&nbsp;*name);&nbsp;<BR>很明白的是,他返回一个指向&nbsp;struct&nbsp;hostent&nbsp;的指针。这个数据结构是这样的:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;hostent&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;*h_name;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;**h_aliases;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h_addrtype;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h_length;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;**h_addr_list;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;h_addr&nbsp;h_addr_list[0]&nbsp;<BR>这里是这个数据结构的详细资料:&nbsp;struct&nbsp;hostent:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;h_name&nbsp;-&nbsp;Official&nbsp;name&nbsp;of&nbsp;the&nbsp;host.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;h_aliases&nbsp;-&nbsp;A&nbsp;NULL-terminated&nbsp;array&nbsp;of&nbsp;alternate&nbsp;names&nbsp;for&nbsp;the&nbsp;host.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;h_addrtype&nbsp;-&nbsp;The&nbsp;type&nbsp;of&nbsp;address&nbsp;being&nbsp;returned;&nbsp;usually&nbsp;AF_INET.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;h_length&nbsp;-&nbsp;The&nbsp;length&nbsp;of&nbsp;the&nbsp;address&nbsp;in&nbsp;bytes.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;h_addr_list&nbsp;-&nbsp;A&nbsp;zero-terminated&nbsp;array&nbsp;of&nbsp;network&nbsp;addresses&nbsp;for&nbsp;the&nbsp;host.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Host&nbsp;addresses&nbsp;are&nbsp;in&nbsp;Network&nbsp;Byte&nbsp;Order.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;h_addr&nbsp;-&nbsp;The&nbsp;first&nbsp;address&nbsp;in&nbsp;h_addr_list.&nbsp;<BR>gethostbyname()&nbsp;成功时返回一个指向&nbsp;struct&nbsp;hostent&nbsp;的指针,或者是个空&nbsp;(NULL)&nbsp;&nbsp;<BR>指针。(但是和以前不同,errno&nbsp;<BR>不设置,h_errno&nbsp;设置错误信息。请看下面的&nbsp;herror()。)&nbsp;<BR>但是如何使用呢?&nbsp;这个函数可不象他看上去那么难用。&nbsp;<BR>这里是个例子:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;stdio.h&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;stdlib.h&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;errno.h&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;netdb.h&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;sys/types.h&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;netinet/in.h&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;main(int&nbsp;argc,&nbsp;char&nbsp;*argv[])&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;hostent&nbsp;*h;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(argc&nbsp;!=&nbsp;2)&nbsp;{&nbsp;&nbsp;/*&nbsp;error&nbsp;check&nbsp;the&nbsp;command&nbsp;line&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&quot;usage:&nbsp;getip&nbsp;address\n&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((h=gethostbyname(argv[1]))&nbsp;==&nbsp;NULL)&nbsp;{&nbsp;&nbsp;/*&nbsp;get&nbsp;the&nbsp;host&nbsp;info&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;herror(&quot;gethostbyname&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Host&nbsp;name&nbsp;&nbsp;:&nbsp;%s\n&quot;,&nbsp;h-&gt;h_name);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;IP&nbsp;Address&nbsp;:&nbsp;%s\n&quot;,inet_ntoa(*((struct&nbsp;in_addr&nbsp;*)h-&gt;h_addr))&nbsp;<BR>);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>在使用&nbsp;gethostbyname()&nbsp;的时候,你不能用&nbsp;perror()&nbsp;打印错误信息(因为&nbsp;errno&nbsp;没有&nbsp;<BR>使用),你应该调用&nbsp;herror()。&nbsp;<BR>相当简单,你只是传递一个保存机器名的自负串(例如&nbsp;&quot;whitehouse.gov&quot;)&nbsp;给&nbsp;gethost&nbsp;<BR>byname(),然后从返回的数据结构&nbsp;struct&nbsp;<BR>hostent&nbsp;中收集信息。&nbsp;<BR>唯一让人迷惑的是打印&nbsp;IP&nbsp;地址信息。h-&gt;h_addr&nbsp;是一个&nbsp;char&nbsp;*,但是&nbsp;inet_ntoa()&nbsp;&nbsp;<BR>需要的是&nbsp;struct&nbsp;<BR>in_addr。因此,我转换&nbsp;h-&gt;h_addr&nbsp;成&nbsp;struct&nbsp;in_addr&nbsp;*,然后得到数据。&nbsp;<BR>Client-Server&nbsp;Background&nbsp;<BR>这里是个客户--服务器的世界。在网络上的所有东西都是在处理客户进程和服务器进程&nbsp;<BR>的交谈。举个&nbsp;telnet&nbsp;的例子。当你用&nbsp;telnet&nbsp;(客户)通过&nbsp;23&nbsp;<BR>号端口登陆到主机,主机上运行的一个程序(一般叫&nbsp;telnetd,服务器)激活。他处理这&nbsp;<BR>个连接,显示登陆界面,等等。&nbsp;<BR>Figure&nbsp;2.&nbsp;The&nbsp;Client-Server&nbsp;Relationship.&nbsp;<BR>图&nbsp;2&nbsp;说明了客户和服务器之间的信息交换。&nbsp;<BR>注意,客户--服务器之间可以使用SOCK_STREAM、SOCK_DGRAM&nbsp;或者其他(只要他们采用相&nbsp;<BR>同的)。一些很好的客户--服务器的例子有&nbsp;<BR>telnet/telnetd、&nbsp;ftp/ftpd&nbsp;和&nbsp;bootp/bootpd。每次你使用&nbsp;ftp&nbsp;的时候,在远端都有&nbsp;<BR>一个&nbsp;ftpd&nbsp;为你服务。&nbsp;<BR>一般,在服务端只有一个服务器,他采用&nbsp;fork()&nbsp;来处理多个客户的连接。基本的程序&nbsp;<BR>是:服务器等待一个连接,接受&nbsp;(accept())&nbsp;连接,然后&nbsp;fork()&nbsp;<BR>一个子进程处理他。这是下一章我们的例子中会讲到的。&nbsp;<BR>简单的服务器&nbsp;<BR>这个服务器所做的全部工作是在留式连接上发送字符串&nbsp;&quot;Hello,&nbsp;World!\n&quot;。你要测试&nbsp;<BR>这个程序的话,可以在一台机器上运行该程序,然后在另外一机器上登陆:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;$&nbsp;telnet&nbsp;remotehostname&nbsp;3490&nbsp;<BR>remotehostname&nbsp;是该程序运行的机器的名字。&nbsp;<BR>服务器代码:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;stdio.h&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;stdlib.h&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;errno.h&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;string.h&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;sys/types.h&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;netinet/in.h&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;sys/socket.h&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;sys/wait.h&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;MYPORT&nbsp;3490&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;the&nbsp;port&nbsp;users&nbsp;will&nbsp;be&nbsp;connecting&nbsp;to&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;BACKLOG&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;how&nbsp;many&nbsp;pending&nbsp;connections&nbsp;queue&nbsp;will&nbsp;hold&nbsp;*&nbsp;<BR>/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;main()&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;sockfd,&nbsp;new_fd;&nbsp;&nbsp;/*&nbsp;listen&nbsp;on&nbsp;sock_fd,&nbsp;new&nbsp;connection&nbsp;on&nbsp;new_fd&nbsp;&nbsp;<BR>*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;sockaddr_in&nbsp;my_addr;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;my&nbsp;address&nbsp;information&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;sockaddr_in&nbsp;their_addr;&nbsp;/*&nbsp;connector's&nbsp;address&nbsp;information&nbsp;*/&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;sin_size;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((sockfd&nbsp;=&nbsp;socket(AF_INET,&nbsp;SOCK_STREAM,&nbsp;0))&nbsp;==&nbsp;-1)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror(&quot;socket&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my_addr.sin_family&nbsp;=&nbsp;AF_INET;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;host&nbsp;byte&nbsp;order&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my_addr.sin_port&nbsp;=&nbsp;htons(MYPORT);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;short,&nbsp;network&nbsp;byte&nbsp;order&nbsp;*&nbsp;<BR>/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my_addr.sin_addr.s_addr&nbsp;=&nbsp;INADDR_ANY;&nbsp;/*&nbsp;auto-fill&nbsp;with&nbsp;my&nbsp;IP&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bzero(&amp;(my_addr.sin_zero),&nbsp;8);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;zero&nbsp;the&nbsp;rest&nbsp;of&nbsp;the&nbsp;struct&nbsp;<BR>&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(bind(sockfd,&nbsp;(struct&nbsp;sockaddr&nbsp;*)&amp;my_addr,&nbsp;sizeof(struct&nbsp;sockaddr&nbsp;<BR>))&nbsp;\&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;==&nbsp;-1)&nbsp;<BR>&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror(&quot;bind&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(listen(sockfd,&nbsp;BACKLOG)&nbsp;==&nbsp;-1)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror(&quot;listen&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(1)&nbsp;{&nbsp;&nbsp;/*&nbsp;main&nbsp;accept()&nbsp;loop&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sin_size&nbsp;=&nbsp;sizeof(struct&nbsp;sockaddr_in);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((new_fd&nbsp;=&nbsp;accept(sockfd,&nbsp;(struct&nbsp;sockaddr&nbsp;*)&amp;their_addr,&nbsp;\&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;sin_size))&nbsp;==&nbsp;-1)&nbsp;<BR>&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror(&quot;accept&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;server:&nbsp;got&nbsp;connection&nbsp;from&nbsp;%s\n&quot;,&nbsp;\&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inet_ntoa(their_addr.sin_addr&nbsp;<BR>));&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!fork())&nbsp;{&nbsp;/*&nbsp;this&nbsp;is&nbsp;the&nbsp;child&nbsp;process&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(send(new_fd,&nbsp;&quot;Hello,&nbsp;world!\n&quot;,&nbsp;14,&nbsp;0)&nbsp;==&nbsp;-1)&nbsp;<BR>&nbs

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -