我对套接字编程有些新意,对于将套接字绑定到地址INADDR_LOOPBACK
或127.0.0.1
的概念感到困惑。
如果我正在编写服务器代码以侦听特定端口上的消息,并且我将套接字绑定到地址,如下面的代码exerpt ...
int sd = socket( PF_INET, SOCK_DGRAM, 0 );
sockaddr_in si;
si.sin_family = AF_INET;
si.sin_addr.s_addr = inet_addr( "127.0.0.1" );
si.sin_port = htons( 9090 );
bind( sd, (sockaddr*)&si, sizeof si )
...我的问题是:谁能够发送到这个套接字?
我知道,与服务器进程在同一台PC上运行的其他进程可以通过sendto()
dest_addr
参数指定127.0.0.1
来到达上述套接字。
但是,如果同一网络中的其他PC上的客户端知道服务器的“实际”地址,它们是否也会发送到该套接字?我的意思是:如果我在Linux PC上运行ifconfig
,我会看到inet
地址,例如: 10.138.19.27
。这是否意味着客户端进程在与服务器不同的PC上,但在同一网络上,可以发送到服务器的套接字 - 绑定到127.0.0.1
- 如果客户端指定地址10.138.19.27
?
答案 0 :(得分:3)
仅与127.0.0.1建立连接,并且这些连接只能来自与侦听器相同的计算机。
当你没有绑定或绑定到INADDR_ANY又名0.0.0.0时,你接受来自所有接口的连接。
Window 1 Window 2
------------------------------------------ ------------------------------------------
$ nc -l 69.163.162.155 5678
$ echo test-localhost | nc localhost 5678
$ echo $?
1
$ echo test-ip | nc 69.163.162.155 5678 test-ip
$ echo $?
0
绑定到IP地址时,只接受定向到该IP地址的连接。
Window 1 Window 2
------------------------------------------ ------------------------------------------
$ nc -l localhost 5678
$ echo test-ip | nc 69.163.162.155 5678
$ echo $?
1
$ echo test-localhost | nc localhost 5678 test-localhost
$ echo $?
0
127.x.x.x中的地址也是如此。
if (isset($_GET["page"])) { $page = $_GET["page"]; } else { $page=1; };
$recortds = 10; // change here for records per page
$start_from = ($page-1) * $records;
$qry = pg_query($dbconn,"select count(*) as total from table");
$row_sql = pg_fetch_row($qry);
$total_records = $row_sql[0];
$total_pages = ceil($total_records / $records);
$select = pg_query($dbconn,"select * from table limit $records offset $start_from");
关于127.x.x.x的特殊之处在于,只有您自己的计算机才能达到127.x.x.x地址。