作者 主題: PHP socket JAVA 單向溝通問題  (閱讀 7932 次)

0 會員 與 1 訪客 正在閱讀本文。

newhand

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
PHP socket JAVA 單向溝通問題
« 於: 2009-12-24 13:35 »
請教各位

小弟做了一個 php 連到 java 的程式

其目地是讓php 連到 java檔後, java 可以傳資料給 php

但是我發現, 只能傳一次, 第二次就傳不過去, java 這邊顯示已斷線

請各位指點一下

下面是php 的code
------------------------------------------------------
<?php

  set_time_limit(0);
 
  function testt()
  {     
      $server = '192.168.30.1'; $port = 11111; $timeout=10;
      $socket = @fsockopen($server, $port, $errno, $errstr, $timeout);

#      if($socket){
        $ttt = fread($socket, 4096);
        echo "ttt:". $ttt ."\n\r<br>";
       
    flush();
    ob_flush();
    sleep(1);

  }


while(true){
    testt();
}


?>
-----------------------------------------------------

下面這是java端的code
-----------------------------------------------------
import java.text.*;
import java.util.*;
import java.io.*;
import java.net.*;
class chatServer{
   int _port = 11111;
   ServerSocket server = null;
   Socket client = null;
   DataInputStream ins= null;
   DataOutputStream outs= null;
   //int chatFlag = -1;
   int chatFlag = 0;
   BufferedReader br = null;
   public chatServer(){
   try{
      server = new ServerSocket(_port);
      System.out.println("Server is created,waiting client...");
      client = linkFromClient();
      String msg = "";Boolean writeMsg = false;
      try{
         DataInputStream ins=new DataInputStream(client.getInputStream());
         DataOutputStream outs=new DataOutputStream(client.getOutputStream());
         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
         while(true){
            if(chatFlag == 0){
               if(!writeMsg){
                  System.out.print("Server said(this computer):");
                  writeMsg=true;
               }
               msg = br.readLine();
               outs.writeUTF(msg);
               outs.flush();
               chatFlag=0;
               msg = "";
            }else{
               String clientMsg = ins.readUTF();
               System.out.println("Client said:" + clientMsg);
               chatFlag = 0;
               writeMsg = false;
            }
         }
      }catch(IOException er){
         if(client!=null)client.close();
      }finally{
         try{
            if(ins!=null)ins.close();
            if(outs!=null)outs.close();
            if(client!=null)client.close();
         }catch(IOException er){}
      }
   }catch(IOException er){
      System.out.println(er.toString());
   }
   }
   Socket linkFromClient(){
      try{
      Socket c = server.accept();
      System.out.print("Connect from " + c.getInetAddress() + " at ");
      Date startDateTime=new Date();
      String startTime = DateFormat.getDateInstance().format(startDateTime) + DateFormat.getTimeInstance().format(startDateTime);
      System.out.print(startTime + "\r\n");
      return c;
      }catch(IOException er){
         return null;
      }
   }
   
}
public class test3{
   public static void main(String[] args) {
      chatServer c = new chatServer();

   }
}
----------------------------------------------------

hoyo

  • 榮譽博士
  • 俺是博士!
  • *****
  • 文章數: 4049
  • 性別: 男
  • 有需要的時候,學習就不會分階段。
    • 檢視個人資料
    • 樂咖黑電腦學習網
回覆: PHP socket JAVA 單向溝通問題
« 回覆 #1 於: 2009-12-24 13:53 »
create port 不需要搞在迴圈內

取消 function 的寫法,除錯會容易些
受人與魚,不如授人與漁
上海自來水來自海上;倫敦好奇人奇好敦倫

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: PHP socket JAVA 單向溝通問題
« 回覆 #2 於: 2009-12-24 13:54 »
請教各位
小弟做了一個 php 連到 java 的程式
其目地是讓php 連到 java檔後, java 可以傳資料給 php
但是我發現, 只能傳一次, 第二次就傳不過去, java 這邊顯示已斷線
請各位指點一下
下面是php 的code
------------------------------------------------------
<?php

  set_time_limit(0);
 
  function testt()
  {     
      $server = '192.168.30.1'; $port = 11111; $timeout=10;
      $socket = @fsockopen($server, $port, $errno, $errstr, $timeout);

#      if($socket){
        $ttt = fread($socket, 4096);
        echo "ttt:". $ttt ."\n\r<br>";
       
    flush();
    ob_flush();
    sleep(1);

  }


while(true){
    testt();
}
?>

http://www.php.net/manual/en/function.fsockopen.php

先參考一下官網fsockopen()的使用範例吧

newhand

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
回覆: PHP socket JAVA 單向溝通問題
« 回覆 #3 於: 2009-12-24 19:40 »
經過改版後
<?php

   set_time_limit(0);
   $server = '127.0.0.1'; $port = 12345; $timeout=1024;
   $socket = @fsockopen($server, $port, $errno, $errstr, $timeout);


   while(true){
      if($socket){
         $ret = fread($socket, 10);
         echo "Ret:". $ret ."\n\r<br>";
         flush();
         ob_flush();
         sleep(1);
      }else{
         $socket = @fsockopen($server, $port, $errno, $errstr, $timeout);
      }
   }

   fclose($socket);
?>
變成這樣子

不過想請問一下 fgets 得到一串不滿1024資訊的資料後 要怎讓它知到資料已輸入完畢?

除了用feof以外
« 上次編輯: 2009-12-24 19:47 由 newhand »

hoyo

  • 榮譽博士
  • 俺是博士!
  • *****
  • 文章數: 4049
  • 性別: 男
  • 有需要的時候,學習就不會分階段。
    • 檢視個人資料
    • 樂咖黑電腦學習網
回覆: PHP socket JAVA 單向溝通問題
« 回覆 #4 於: 2009-12-24 20:02 »
自訂 protocol

一串多長?
開頭、結尾字元?
重傳?
:
:
受人與魚,不如授人與漁
上海自來水來自海上;倫敦好奇人奇好敦倫

Orz

  • 憂鬱的高中生
  • ***
  • 文章數: 135
    • 檢視個人資料
回覆: PHP socket JAVA 單向溝通問題
« 回覆 #5 於: 2009-12-28 15:36 »
字串長度不固定
開頭跟結尾可以固定傳出指訂字元

請問要用那個函數或是指令去做判讀?

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: PHP socket JAVA 單向溝通問題
« 回覆 #6 於: 2009-12-28 18:34 »
字串長度不固定
開頭跟結尾可以固定傳出指訂字元

請問要用那個函數或是指令去做判讀?

strpos() 或 preg_match()

botman

  • 可愛的小學生
  • *
  • 文章數: 1
    • 檢視個人資料
回覆: PHP socket JAVA 單向溝通問題
« 回覆 #7 於: 2010-01-06 00:32 »
我剛剛 看你寫的JAVA
try -catch -finally

finally==>區塊依定會執行的,不管例外有沒有發生都會執行, 剛剛看妳finally趨快把物件都close()了~~
                會不會是哪裡有問題

這是小弟我的一點看法,我是還沒跑過 有空再拿去跑跑看~~