PHP 求助,SOCKET收不到响应
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 求助,SOCKET收不到响应相关的知识,希望对你有一定的参考价值。
各位:本人做了一个小程序 php短连接SERVER,逻辑是先发一笔请求,根据响应查出的信息,然后再发送几笔请求,经查服务器,所有请求都给出了正确应答,但是问题是只有第一笔能正确收到应答,后面发出的交易时而收到应答,时而收不到应答,这是怎么回事呢?以下是发送信息的函数
function sendmessage($mess)
//用来发送交易
error_reporting(E_ALL);
$service_port=3069;
$address="XX.XX.XX.XX";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0)
return "1";
$result = socket_connect($socket, $address, $service_port);
if ($result < 0)
return "2";
$in=iconv( "UTF-8", "gb2312" , $mess);
$out = "ERROR";
socket_write($socket, $in, strlen($in));
$allout="";
while($out = socket_read($socket, 2048))
$allout.=$out;
socket_close($socket);
return iconv("gb2312","UTF-8",$allout);
另外有个情况是,我在UNIX主机运行上述程序,完全没有问题,但是移到WINDOWS上,就出现上述情况。
http://www.php.net/manual/zh/function.socket-read.php
里面提到一个bug:
https://bugs.php.net/bug.php?id=21197
你可以在socket_read最后加上:PHP_NORMAL_READ这个参数试试:
while($out = socket_read($socket, 2048,PHP_NORMAL_READ))
JAVA socket 收不到数据 求指点
//client
package lw.Net.SocketStop;
import java.io.*;
import java.net.*;
public class Sender
private String host="127.0.0.1";
private int port=1001;
private Socket s;
public static int stopWay=1;
private String msg="hello";
public Sender() throws IOException
s=new Socket(host,port);
public void sent() throws Exception
PrintWriter pw=new PrintWriter(s.getOutputStream());
for(int i=0;i<2;i++)
pw.println(msg+i+",");
System.out.println("sent NO."+i+" data");
Thread.sleep(1000);
s.close();
public static void main(String[] args) throws Exception
new Sender().sent();
//server
package lw.Net.SocketStop;
import java.io.*;
import java.net.*;
public class Receiver
/**
* @param args
*/
private int port=1001;
private ServerSocket ss;
private Socket s;
private String msg;
public Receiver() throws IOException
ss=new ServerSocket(port);
System.out.print("Server started!");
public void receive() throws Exception
s=ss.accept();
System.out.println("发现socket请求!"+s.getPort());
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
for(int i=0;i<2;i++)
msg=br.readLine();
System.out.println("receive:"+msg);
Thread.sleep(1000);
s.close();
ss.close();
public static void main(String[] args) throws Exception
// TODO Auto-generated method stub
if(args.length>0)
stopWay=Integer.parseInt(args[0]);
new Receiver().receive();
System.out.println("sent NO."+i+" data");
System.out.println("receive:"+msg);
这两句打印了没?追问
System.out.println("sent NO."+i+" data");
这句有打印出来;
System.out.println("receive:"+msg);
这句打印的是receive:null两次
System.out.println("sent NO."+i+" data");
这句没有打印说明没有发送成功呀。所以接收的就是null。
你要先运行Receiver.java再运行Sender.java
System.out.println("sent NO."+i+" data");
这句能打印出来
我发现问题在哪了,在Sender端关闭socket前 关闭流(pw.close()) Receiver端就可以收到数据, 大神知道什么原因吗 我不是很明白啊
因为你的pw是由s创建的,你在第一次循环的时候就s.close,那么下一次循环就没了。
你把s.close();写到for循环外面。这样:
pw.close();
s.close();
以上是关于PHP 求助,SOCKET收不到响应的主要内容,如果未能解决你的问题,请参考以下文章
websocket前端发送一个消息 后端还没执行完 收不到第二条消息
求助:android两个及以上控件点击事件同时监听响应如何实现