我正在開發一個c#和php項目,PHP腳本向c#程序打開一個套接字,並且c#程序將讀取數據,然後發回響應。從套接字讀取數據,發送回覆並關閉
在PHP腳本中,我有以下幾點:
echo "Opening Client";
$fp = fsockopen("127.0.0.1", 12345, $errno, $errstr, 30);
if (!$fp)
{
echo "Error: $errstr ($errno)<br />";
}
else
{
$out = "GET/HTTP/1.1\r\n";
$out .= "Host: 127.0.0.1\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp))
{
echo fgets($fp, 128);
}
fclose($fp);
}
在C#項目中,我有以下幾點:
public void startListen()
{
int port = 12345;
IPAddress serverAddress = IPAddress.Parse("127.0.0.1");
TcpListener listener = new TcpListener(serverAddress, 12345);
listener.Start();
TcpClient client = listener.AcceptTcpClient();
NetworkStream stream = client.GetStream();
byte[] data = new byte[client.ReceiveBufferSize];
int bytesRead = stream.Read(data, 0, Convert.ToInt32(client.ReceiveBufferSize));
string request = Encoding.ASCII.GetString(data, 0, bytesRead);
Console.WriteLine(request);
Console.ReadLine();
PHP腳本似乎停留等待,沒有完成,我猜測它的存在是因爲c#應用程序上的套接字發送迴應,但我不知道如何做到這一點。另一個問題,在C#中我需要有Console.ReadLine()
否則c#程序將退出,但PHP腳本然後按預期完成。
基本上,我想知道的是這是讀取在套接字上發送的數據的最佳方式,保持程序運行的最佳方式是什麼,以便它始終監聽套接字以及如何發回回覆,以便PHP腳本可以完成。
感謝您提供的任何幫助。
在你的C#代碼...你居然不寫什麼流?我想有一些stream.Write()方法應該用於發回數據。另一個說明:你確定你在正確的抽象層次上工作嗎? Arent有.NET中的StreamReader/StreamWriter類,這使它更容易與(套接字)流進行交互? – Max