关于php中socket的问题: 50

我现在是初步了解socket通信,所以我去PHP手册里面找了这样一个代码,先上代码:<?phperror_reporting(E_ALL);/*Allowthescrip... 我现在是初步了解socket通信,所以我去PHP手册里面找了这样一个代码,先上代码:
<?php
error_reporting(E_ALL);
/* Allow the script to hang around waiting for connections. */
set_time_limit(0);

/* Turn on implicit output flushing so we see what we're getting
* as it comes in. */
ob_implicit_flush();

$address = '192.168.168.121';
$port = 8528;

if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
}

if (socket_bind($sock,$address,$port) === false) {
echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}

if (socket_listen($sock,5) === false) {
echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}

do {
if (($msgsock = socket_accept($sock)) === false) {
echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
break;
}
/* Send instructions. */
$msg = "\nWelcome to the PHP Test Server. \n" .
"To quit, type 'quit'. To shut down the server type 'shutdown'.\n";
socket_write($msgsock, $msg, strlen($msg));

do {
if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
break 2;
}
if (!$buf = trim($buf)) {
continue;
}
if ($buf == 'quit') {
break;
}
if ($buf == 'shutdown') {
socket_close($msgsock);
break 2;
}
$talkback = "PHP: You said '$buf'.\n";
socket_write($msgsock, $talkback, strlen($talkback));
echo "$buf\n";
} while (true);
socket_close($msgsock);
} while (true);

socket_close($sock);
?>
现在的问题是弹出warning:socket_bind(): unable to bind address [10048]: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
不过我换了N多端口了,就是不行啊。各位大侠有人遇到过这样的问题吧,传授一下呗。
还有解释一下端口的概念吧,这儿有点模糊,我的概念中端口就是计算机分出来的N个窗口(但是现在都不知道这个窗口号是不是自己随意定的啊),然后每个窗口可以分别用来做一些事情。
展开
 我来答
拒绝自己成长
2016-11-23 · 超过16用户采纳过TA的回答
知道答主
回答量:29
采纳率:0%
帮助的人:16.6万
展开全部

这是socket的服务端的代码,监听的ip地址是192.168.168.121,核肢端口改茄世号为8528


请检查以下几点

  1. 这个ip是不是代码所在服务器的ip,一般监测内网ip,如127.0.0.1

  2. 端纳缺口号是否被使用,可以使用cmd命令 netstat -ano|findstr 8528  查找端口号为8528的端口使用情况

  3. 如果要给在公网上使用,请使用公网ip,这样可以外网使用

  4. 如果代码不报错可以试下telnet下你的端口号,看是否可以使用

    如 telnet 127.0.0.1 8528

解决方案

    查看你电脑的ip地址,把上面代码里“$address = '192.168.168.121';”这个ip地址换成“$address = '127.0.0.1';”或者你电脑的ip地址,再试试。

    (ip地址改成127.0.0.1后,这段代码在我电脑上可以使用)

追问
嗯,换了ip和端口也还是一样的情况。你的只要改掉Ip就正常运行了么?我是觉得是不是PHP用socket需要配置什么啊。另外问你回答中的几个问题(应为我现在最缺的其实是对服务端/客户端/网络等交往机制的了解):
1/socket服务器端是用的服务器的ip地址对么?像我现在学都是借助wampserver学,那这个服务器就是我自己的本机?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式