java php通讯

时间:2012-03-01 04:19:11

标签: java php serversocket

我编写了一个客户端java应用程序,它通过http与php服务器进行通信。我需要在java(客户端)端实现一个监听器来响应php服务器发出的请求。目前,java应用程序正在命中每分钟更新的服务器上的文本文件。

这已经运行正常,但现在客户端java应用程序的数量正在增加,这个原始系统开始崩溃。

改变这个的最佳方法是什么?我在java客户端应用程序上尝试了一个java ServerSocket监听器,但无法使其工作。我无法完成沟通。 Web上的所有示例都使用localhost作为ip地址示例,我的php服务器是远程托管的。

我是否需要获取客户端计算机的IP地址并将其发送到php服务器,以便php知道在哪里发送消息?这是java代码......这是遍布网络...

public class MyJavaServer
{

    public static void main(String[] args)
    {


        int port = 4444;
        ServerSocket listenSock = null; //the listening server socket
        Socket sock = null;          //the socket that will actually be used for communication

        try
        {

            System.out.println("listen");
            listenSock = new ServerSocket(port);

            while (true)
            {

                sock = listenSock.accept(); 

                BufferedReader br = new BufferedReader(new InputStreamReader(sock.getInputStream()));
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
                String line = "";
                while ((line = br.readLine()) != null)
                {
                    bw.write("PHP said: " + line + "\n");
                    bw.flush();
                }

                //Closing streams and the current socket (not the listening socket!)
                bw.close();
                br.close();
                sock.close();
            }
        }
        catch (IOException ex)
        {
            System.out.println(ex);
        }
    }
}

...这里是php

$PORT = 4444; //the port on which we are connecting to the "remote" machine
$HOST = "ip address(not sure here)"; //the ip of the remote machine(of the client java app's computer???

$sock = socket_create(AF_INET, SOCK_STREAM, 0) 
        or die("error: could not create socket\n");

$succ = socket_connect($sock, $HOST, $PORT) 
        or die("error: could not connect to host\n");

$text = "Hello, Java!\n"; //the text we want to send to the server

socket_write($sock, $text . "\n", strlen($text) + 1) 
        or die("error: failed to write to socket\n");

$reply = socket_read($sock, 10000, PHP_NORMAL_READ)
        or die("error: failed to read from socket\n");

echo $reply;

这根本行不通。 java应用程序监听,但php脚本永远不会连接。

另外,这是我需要的最佳方法吗? 感谢。

1 个答案:

答案 0 :(得分:0)

如果php服务器计算机可以连接到Java客户端计算机,则包含的代码可以正常工作。在您的情况下,这是遍布整个Web,这意味着Java客户端计算机应该具有公共可访问的IP。一旦你拥有它,将该IP分配给$ HOST,那么代码将运行正常。

假设没有客户端可以拥有公共IP,我认为最好的方法是让您的Java客户端使用HTTP请求以请求 - 回复方式与您的PHP服务器通信。 Java客户端就像Web浏览器一样,发送HTTP请求并接收包含Java客户端所需数据的HTTP回复。当客户端数量上升到PHP服务器无法处理的水平时,您可以将其扩展。虽然我自己没有这方面的经验,但现在扩展PHP服务器的情况并不少见。