参考: https://bbs.csdn.net/topics/391024376

别瞎猜测。

所谓bind,就是指绑定本地接受端口。

指定ip,是为了分辨多ip主机。

------------------------------------------------------

这个应该是不可以的,你的电脑只能控制你自己的电脑的IP,不能控制别人电脑的IP,试想一下,如果你可以控制别人的电脑的IP,那网络不就乱套了,除非别人给你开了端口映射,你可以百度下端口映射技术。

下面的172.18.68.44 不能填外网的ip 地址。 那172.18.68.44是怎么看出来的呢?

由上图可以看出, 这个172.18.68.44 上网卡上的ip。,当然,socket_bind($socket, '0.0.0.0', 8888); 绑定0.0.0.0 也是可以的。

In the context of servers, 0.0.0.0 means all IPv4 addresses on the local machine. If a host has two IP addresses, 192.168.1.1 and 10.1.2.1, and a server running on the host listens on 0.0.0.0, it will be reachable at both of those IPs (Note: This particular text is repeated from above as part of the overall answer).

<?php
//创建服务端的socket套接流,net协议为IPv4,protocol协议为TCP
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP); /*绑定接收的套接流主机和端口,与客户端相对应*/
if(socket_bind($socket,'172.18.68.44',8888) == false){
echo 'server bind fail:'.socket_strerror(socket_last_error());
/*这里的127.0.0.1是在本地主机测试,你如果有多台电脑,可以写IP地址*/
}
//监听套接流
if(socket_listen($socket,4)==false){
echo 'server listen fail:'.socket_strerror(socket_last_error());
}
//让服务器无限获取客户端传过来的信息
do{
/*接收客户端传过来的信息*/
$accept_resource = socket_accept($socket);
/*socket_accept的作用就是接受socket_bind()所绑定的主机发过来的套接流*/ if($accept_resource !== false){
/*读取客户端传过来的资源,并转化为字符串*/
$string = socket_read($accept_resource,1024);
/*socket_read的作用就是读出socket_accept()的资源并把它转化为字符串*/ echo '----------server receive is :'.$string.PHP_EOL;//PHP_EOL为php的换行预定义常量
if($string != false){
$return_client = '+++++++++++++server receive is : '.$string.PHP_EOL;
/*向socket_accept的套接流写入信息,也就是回馈信息给socket_bind()所绑定的主机客户端*/
socket_write($accept_resource,$return_client,strlen($return_client));
/*socket_write的作用是向socket_create的套接流写入信息,或者向socket_accept的套接流写入信息*/
}else{
echo 'socket_read is fail';
}
/*socket_close的作用是关闭socket_create()或者socket_accept()所建立的套接流*/
socket_close($accept_resource);
}
}while(true);
socket_close($socket);

  client_socket.php

<?php
//创建一个socket套接流
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
/****************设置socket连接选项,这两个步骤你可以省略*************/
//接收套接流的最大超时时间1秒,后面是微秒单位超时时间,设置为零,表示不管它
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 1, "usec" => 0));
//发送套接流的最大超时时间为6秒
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array("sec" => 6, "usec" => 0));
/****************设置socket连接选项,这两个步骤你可以省略*************/ //连接服务端的套接流,这一步就是使客户端与服务器端的套接流建立联系
if(socket_connect($socket,'120.79.14.84',8888) == false){
echo 'connect fail massege:'.socket_strerror(socket_last_error());
}else{
$message = 'l love you 我的 socket';
//转为GBK编码,处理乱码问题,这要看你的编码情况而定,每个人的编码都不同
// $message = mb_convert_encoding($message,'GBK','UTF-8');
//向服务端写入字符串信息 if(socket_write($socket,$message,strlen($message)) == false){
echo 'fail to write'.socket_strerror(socket_last_error()); }else{
echo 'client write success'.PHP_EOL;
//读取服务端返回来的套接流信息
while($callback = socket_read($socket,1024)){
echo 'server return message is:'.PHP_EOL.$callback;
}
}
}
socket_close($socket);//工作完毕,关闭套接流

  

socket的bind函数是不是只能绑定本地IP,不能绑定外网IP么?的更多相关文章

  1. 获取Mac、CPUID、硬盘序列号、本地IP地址、外网IP地址OCX控件

    提供获取Mac.CPUID.硬盘序列号.本地IP地址.外网IP地址OCX控件 开发语言:vc++ 可应用与WEB程序开发应用 <HTML><HEAD><TITLE> ...

  2. Android 获得本地IP地址、外网IP地址、本设备网络状态信息、本地Mac地址

    本地内网IP和外网IP的区别: 根据我的经验一台电脑需要两个ip才可以上网,一个是本地的内网ip 一个是外网的ip 本地的ip 一般是192.168.1.2这种样子  只要在不同的路由器上可以重复 外 ...

  3. Android 获取本地外网IP、内网IP、计算机名等信息

    一.获取本地外网IP public static String GetNetIp() { URL infoUrl = null; InputStream inStream = null; try { ...

  4. 读取本地外网IP地址

    读取本地外网IP地址. 根据启动并运行的网卡名称,找到本机实际的IP地址(已知当前运行的无线网卡名包含某一个字符) import java.net.InterfaceAddress; import j ...

  5. Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)

    Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer   Advanced Installer :Free for 30 da ...

  6. 获取本地内网和外网IP地址

    public class IPUtil { /// <summary> /// 获取本地内网IP /// </summary> /// <returns></ ...

  7. c语言 c++ 实现查看本地ip,外网ip, 本地主机名,查看http网址对应的ip

    /******************************************************************************* 作者 :邓中强 Email :1246 ...

  8. 【NGROK】快速实现本地Web服务到外网的映射

    NGROK官网:https://ngrok.com NGROK百科:http://baike.baidu.com/view/13085941.htm?fr=aladdin 使用ngrok(Window ...

  9. 3 微信开发本地代理环境的搭建--实现将内网ip映射到外网

    微信公众号的开发,要搭建网站,并且随时都有可能修改网站内容进行调试,这就需要临时外网能返回本地开发环境搭建的项目进行测试,即内网映射到公网,但是好多开发者没有自己的域名和服务器,这里我们先来搭建一个本 ...

随机推荐

  1. Python3简明教程(十)—— 异常

    在本节我们学习 Python 的异常以及如何在你的代码中处理它们. 异常 在程序执行过程中发生的任何错误都是异常.每个异常显示一些相关的错误信息,比如你在 Python3 中使用 Python2 独有 ...

  2. python数据类型常用内置函数之字符串

    1.strip, lstrip, rstrip x = ' jiahuifeng ' print(x.strip(' ')) print(x.lstrip(' ')) print(x.rstrip(' ...

  3. 优先队列 || POJ 1442 Black Box

    给n个数,依次按顺序插入,第二行m个数,a[i]=b表示在第b次插入后输出第i小的数 *解法:写两个优先队列,q1里由大到小排,q2由小到大排,保持q2中有i-1个元素,那么第i小的元素就是q2的to ...

  4. Piston Pump Manufacturers - Mobile Cartridge Piston Pump: Advantages

    The    Piston Pump Manufacturers   states that the operation of any piston pump is based on the rela ...

  5. win7下自动更新svn目录

    !!注意,文件编码必须是ANSI.否则中文路径会乱码 ::这里是svn安装目录 set svnExe="C:\Program Files\TortoiseSVN\bin\TortoisePr ...

  6. [bzoj4899]记忆的轮廓 题解(毒瘤概率dp)

    题目背景 四次死亡轮回后,昴终于到达了贤者之塔,当代贤者夏乌拉一见到昴就上前抱住了昴“师傅!你终于回来了!你有着和师傅一样的魔女的余香,肯定是师傅”.众所周知,大贤者是嫉妒魔女沙提拉的老公,400年前 ...

  7. Thread和Runable的关系

    Thread 是一个类 Runnable是一个接口 Thread是实现了Runnable接口的类,使得run支持多线程 因为类的单一继承原则,推荐多使用Runnable接口

  8. 数论基础之组合数&计数问题

    一.组合数:问题引入:现在有 n 个球,取其中的 k 个球,问一共有多少种方式?答案: 公式直观解释:我们考虑有顺序地取出 k 个球:第一次有 n 种选择,第二次有 n-1 种选择,...,第 k 次 ...

  9. POJ-1002-487-3279(字符串)

    487-3279 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 309685 Accepted: 55292 Descripti ...

  10. bootspring网站项目,Date类型插入数据库始终比正确时间早一天问题的解决

    bug描述 昨天的Date插入不进去问题解决后,一直没发现其实插入的时间一直比正确的时间早一天 输出sql语句,发现insert语句还是对的,不知道为什么插入数据库之后结果就早了一天 https:// ...