2011-11-18 41 views
0

我對套接字編程頗爲陌生,但這裏什麼都不做。PHP客戶端和C#服務器 - 由於超時而無法通信

我一直在嘗試在C#服務器和PHP客戶端之間進行一些簡單的TCP通信。但是,我沒有在他們之間建立聯繫的運氣。我基本上是通過PHP套接字通信通過Web瀏覽器發送桌面應用程序消息。但是,我不斷收到超時錯誤。

我的代碼如下:

我的C#服務器代碼 - 它只是簡單地聆聽,並通知我,如果建立了連接

static void Main(string[] args) 
    { 
     try 
     { 
      IPAddress localAddress = IPAddress.Parse("xx.xx.xx.xx"); 

      TcpListener listener = new TcpListener(localAddress, 4761); 

      listener.Start(1); 

      while (true) 
      { 
       Console.WriteLine("Server is waiting on socket {0}", listener.LocalEndpoint); 

       TcpClient client = listener.AcceptTcpClient(); 

       NetworkStream IO = client.GetStream(); 

       Console.WriteLine("Recieved a connection from {0}", client.Client.RemoteEndPoint); 

       Console.WriteLine("Time to depart."); 
       client.Close(); 
      } 
     } 
     catch (Exception E) 
     { 
      Console.WriteLine("Caught exception: {0}", E.ToString()); 
     } 
    } 

PHP客戶端 - 這是我提出的一項功能只是連接到服務器(失敗悲慘)

  public function Hook_Up($Host_IP) 
    { 
     $this->String_and_Cup = fsockopen("xx.xx.xx.xx", 4761); 

     if($this->String_and_Cup) 
     { 
      echo "Congratulations, it's a socket connection..."; 
     } 
     else 
     { 
      echo "I'm sorry, the socket connection didn't make it..."; 
     } 
    } 

所有我想要這麼做是通過瀏覽器連接到這個服務器。我很感激關於如何這樣做的意見。

在此先感謝。

回答

2

我不認爲你應該用這種方法來達到目的。您將無法通過瀏覽器使用的協議http連接到tcp端口。您創建的PHP套接字必須從命令行運行才能正常工作。

從什麼可以告訴你,你可能想看看網絡套接字這是一個HTML5實現,目前由更新版本的Chrome和Firefox支持。 Web套接字使用Web套接字協議來實現基於推送的系統,您可以使用一個服務器使用內存隊列(例如活動的mq)來推送來自服務器的消息,並且作爲瀏覽器的客戶端應從這些消息中提取這些消息服務器在隊列中。

TCP套接字不適用於瀏覽器。如果你想從服務器連接到TCP套接字,你可以這樣做只是使用javascript在這裏給出http://ajaxian.com/archives/tcpsocket-sockets-in-the-browser

var conn = new TCPSocket(hostname, port) 

conn.onopen = function() { alert('connection opened!') } 
conn.onread = function(data) { alert('RECEIVE: ' + data) } 
conn.onclose = function(data) { alert('connection closed!') } 

conn.send('Hello World'); 
+0

哇,謝謝你的鏈接和建議!我真的很感激!我會繼續在早上檢查一下,並告訴你它是如何工作的。再次感謝你! – Exitium