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

📄 1033.html

📁 著名的linux英雄站点的文档打包
💻 HTML
📖 第 1 页 / 共 3 页
字号:
            <TD rowSpan=2><IMG src="images/header_r1_c7.gif" tppabs="http://www.linuxhero.com/docs/images/header_r1_c7.gif" width=26 border=0 name=header_r1_c7></TD>
          <TD><IMG height=83 src="images/spacer.gif" tppabs="http://www.linuxhero.com/docs/images/spacer.gif" width=1 border=0></TD></TR>
        <TR>
          <TD background="images/bgline.gif" tppabs="http://www.linuxhero.com/docs/images/bgline.gif"><IMG height=22 
            src="images/header_r2_c1.gif" tppabs="http://www.linuxhero.com/docs/images/header_r2_c1.gif" width=296 border=0 
            name=header_r2_c1></TD>
          <TD background="images/bgline.gif" tppabs="http://www.linuxhero.com/docs/images/bgline.gif" colSpan=5>
              <DIV align=right><FONT class=normalfont>当前位置: 
              <A href="index.html" tppabs="http://www.linuxhero.com/docs/index.html">本站首页</A>
              <font color="#FF6699">&gt;&gt;</font>
<A href="type14.html" tppabs="http://www.linuxhero.com/docs/type14.html">编程技术</A>                 | <A href="copyright.html" tppabs="http://www.linuxhero.com/docs/copyright.html">版权说明</A></font></DIV>
            </TD>
          <TD><IMG height=22 src="images/spacer.gif" tppabs="http://www.linuxhero.com/docs/images/spacer.gif" width=1 
        border=0></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=10 cellPadding=0 width="100%" bgColor=#ffffff 
        border=0>
         <TR>
          <TD>
            <TABLE cellSpacing=0 cellPadding=3 width="100%" border=0>
              
              <TR>
                <TD vAlign=top align=middle width="60%">
                  <TABLE cellSpacing=0 cellPadding=0 width="100%" 
                  background="images/back.gif" tppabs="http://www.linuxhero.com/docs/images/back.gif" border=0>
                    <TBODY>
                    <TR>
                        <TD vAlign=top width="80%"> 
                          <DIV align=center>
                        <FORM action="search.html" tppabs="http://www.linuxhero.com/docs/search.html" method=get>
                            </FORM>
                        <TABLE cellSpacing=0 cellPadding=0 width="95%" 
                          border=0><TBODY>
                          <TR>
                            <TD background="images/bgi.gif" tppabs="http://www.linuxhero.com/docs/images/bgi.gif" 
                          height=30></TD></TR></TBODY></TABLE>
                        <TABLE cellSpacing=0 cellPadding=3 width="95%" 
                        align=center border=0>
                          <TBODY>
                          <TR>
                            <TD>
                              <TABLE cellSpacing=0 cellPadding=3 width="100%" 
                              border=0>
                                <TBODY>
                                <TR>
                                      <TD vAlign=top> 
<p><FONT class=normalfont><B><font color=blue>socket</font></B></FONT><BR><FONT class=smallfont color=#ff9900>2004-04-23 15:18 pm</FONT><BR><FONT class=normalfont>作者:作者<br>来自:Linux知识宝库<br>联系方式:无名<br><br>socket()<br>
<br>
我们使用系统调用socket()来获得文件描述符:<br>
#include&lt;sys/types.h&gt;<br>
#include&lt;sys/socket.h&gt;<br>
int socket(int domain,int type,int protocol);<br>
第一个参数domain设置为“AF_INET”。<br>
第二个参数是套接口的类型:SOCK_STREAM或<br>
SOCK_DGRAM。第三个参数设置为0。<br>
系统调用socket()只返回一个套接口描述符,如果出错,则返回-1。<br>
<br>
<br>
<br>
<br>
<br>
[目录]<br>
<br>
--------------------------------------------------------------------------------<br>
<br>
<br>
bind()<br>
<br>
一旦你有了一个套接口以后,下一步就是把套接口绑定到本地计算机的某一个端口上。但如果你只想使用connect()则无此必要。<br>
下面是系统调用bind()的使用方法:<br>
#include&lt;sys/types.h&gt;<br>
#include&lt;sys/socket.h&gt;<br>
intbind(int sockfd,struct sockaddr*my_addr,int addrlen);<br>
第一个参数sockfd是由socket()调用返回的套接口文件描述符。<br>
第二个参数my_addr是指向数据结构sockaddr的指针。数据结构sockaddr中包括了关于你的地址、端口和IP地址的信息。<br>
第三个参数addrlen可以设置成sizeof(structsockaddr)。<br>
下面是一个例子:<br>
#include&lt;string.h&gt;<br>
#include&lt;sys/types.h&gt;<br>
#include&lt;sys/socket.h&gt;<br>
#defineMYPORT3490<br>
main()<br>
{<br>
int sockfd;<br>
struct sockaddr_inmy_addr;<br>
sockfd=socket(AF_INET,SOCK_STREAM,0);/*do someerror checking!*/<br>
my_addr.sin_family=AF_INET;/*hostbyteorder*/<br>
my_addr.sin_port=htons(MYPORT);/*short,network byte order*/<br>
my_addr.sin_addr.s_addr=inet_addr("132.241.5.10");<br>
bzero(&(my_addr.sin_zero),icon_cool.gif;/*zero the rest of the struct*/<br>
/*don't forget your error checking for bind():*/<br>
bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr));<br>
...<br>
如果出错,bind()也返回-1。<br>
如果你使用connect()系统调用,那么你不必知道你使用的端口号。当你调用connect()时,它检查套接口是否已经绑定,如果没有,它将会分配一个空闲的端口。<br>
<br>
<br>
<br>
<br>
<br>
[目录]<br>
<br>
--------------------------------------------------------------------------------<br>
<br>
<br>
connect()<br>
<br>
系统调用connect()的用法如下:<br>
#include&lt;sys/types.h&gt;<br>
#include&lt;sys/socket.h&gt;<br>
int connect(int sockfd,struct sockaddr* serv_addr,int addrlen);<br>
第一个参数还是套接口文件描述符,它是由系统调用socket()返回的。<br>
第二个参数是serv_addr是指向数据结构sockaddr的指针,其中包括目的端口和IP地址。<br>
第三个参数可以使用sizeof(structsockaddr)而获得。<br>
下面是一个例子:<br>
#include&lt;string.h&gt;<br>
#include&lt;sys/types.h&gt;<br>
#include&lt;sys/socket.h&gt;<br>
#defineDEST_IP"132.241.5.10"<br>
#defineDEST_PORT23<br>
main()<br>
{<br>
intsockfd;<br>
structsockaddr_indest_addr;/*will hold the destination addr*/<br>
sockfd=socket(AF_INET,SOCK_STREAM,0);/*do some error checking!*/<br>
dest_addr.sin_family=AF_INET;/*hostbyteorder*/<br>
dest_addr.sin_port=htons(DEST_PORT);/*short,network byte order*/<br>
dest_addr.sin_addr.s_addr=inet_addr(DEST_IP);<br>
bzero(&(dest_addr.sin_zero),icon_cool.gif;/*zero the rest of the struct*/<br>
/*don'tforgettoerrorchecktheconnect()!*/<br>
connect(sockfd,(structsockaddr*)&dest_addr,sizeof(struct sockaddr));<br>
...<br>
同样,如果出错,connect()将会返回-1。<br>
<br>
<br>
<br>
<br>
<br>
[目录]<br>
<br>
--------------------------------------------------------------------------------<br>
<br>
<br>
listen()<br>
<br>
如果你希望不连接到远程的主机,也就是说你希望等待一个进入的连接请求,然后再处理它们。这样,你通过首先调用listen(),然后再调用accept()来实现。<br>
系统调用listen()的形式如下:<br>
intl isten(int sockfd,int backlog);<br>
第一个参数是系统调用socket()返回的套接口文件描述符。<br>
第二个参数是进入队列中允许的连接的个数。进入的连接请求在使用系统调用accept()应答之前要在进入队列中等待。这个值是队列中最多可以拥有的请求的个数。大多数系统的缺省设置为20。你可以设置为5或者10。当出错时,listen()将会返回-1值。<br>
当然,在使用系统调用listen()之前,我们需要调用bind()绑定到需要的端口,否则系统内核将会让我们监听一个随机的端口。所以,如果你希望监听一个端口,下面是应该使用的系统调用的顺序:<br>
socket();<br>
bind();<br>
listen();<br>
/*accept()goeshere*/<br>
<br>
<br>
<br>
<br>
<br>
[目录]<br>
<br>
--------------------------------------------------------------------------------<br>
<br>
<br>
accept()<br>
<br>
系统调用accept()比较起来有点复杂。在远程的主机可能试图使用connect()连接你使用<br>
listen()正在监听的端口。但此连接将会在队列中等待,直到使用accept()处理它。调用accept()<br>
之后,将会返回一个全新的套接口文件描述符来处理这个单个的连接。这样,对于同一个连接<br>
来说,你就有了两个文件描述符。原先的一个文件描述符正在监听你指定的端口,新的文件描<br>
述符可以用来调用send()和recv()。<br>
调用的例子如下:<br>
#include&lt;sys/socket.h&gt;<br>
intaccept(intsockfd,void*addr,int*addrlen);<br>
第一个参数是正在监听端口的套接口文件描述符。第二个参数addr是指向本地的数据结构<br>
sockaddr_in的指针。调用connect()中的信息将存储在这里。通过它你可以了解哪个主机在哪个<br>
端口呼叫你。第三个参数同样可以使用sizeof(structsockaddr_in)来获得。<br>
如果出错,accept()也将返回-1。下面是一个简单的例子:<br>
#include&lt;string.h&gt;<br>
#include&lt;sys/types.h&gt;<br>
#include&lt;sys/socket.h&gt;<br>
#defineMYPORT3490/*theportuserswillbeconnectingto*/<br>

⌨️ 快捷键说明

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