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上,就出现上述情况。

参考技术A 没用过php的socket,不过查看socket_read的手册的时候,看到下面有些人对于win上面的socket的讨论,你可以看看:
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();



参考技术A 先运行Receiver,再运行Sender。

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收不到响应的主要内容,如果未能解决你的问题,请参考以下文章

ftp C# SOCKET PASV命令无响应

websocket前端发送一个消息 后端还没执行完 收不到第二条消息

求助:android两个及以上控件点击事件同时监听响应如何实现

45 岁程序员求助:技术体系全精通,却连个面试通知都收不到…

C# Socket Server 收不到数据

PHP+SOCKET 模拟HTTP请求