c# - 从套接字读取数据,发送响应并关闭

标签 c# php sockets

我正在开发一个 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 脚本可以完成。

感谢您提供的任何帮助。

最佳答案

我设法解决了这个问题,在处理完我需要的数据之后,我发送了一个 stream.write,这是发送回回复的内容。

下面是代码

            int port = 12345;
            IPAddress serverAddress = IPAddress.Parse("127.0.0.1");
            TcpListener listener = new TcpListener(serverAddress, port);
            listener.Start();

            while (true)
            {
                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);
                byte[] msg = System.Text.Encoding.ASCII.GetBytes("200 OK");

                // Send back a response.
                stream.Write(msg, 0, msg.Length);
                client.Close();
            }

谢谢你的帮助

关于c# - 从套接字读取数据,发送响应并关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10806577/

相关文章:

c# - 按时间取消任务

php - 我应该在 BDD 中使用肯定断言和否定断言吗?

c++ - 如何获取异步读取时传输的字节数boost asio c++

c++ - IOCP - 发布重叠或读取数据包?

sockets - 无法使用ESP8266和Arduino uno建立连接

c# - 无法使用 asp.net 将 <null> 分配给隐式类型局部变量

c# - 为什么我们必须在C#中同时定义==和!=?

c# - 在 Visual Studio 2010 加载项中访问命名空间时出现问题

PHP - 使用 for 循环而不是 switch 语句

javascript - CakePHP:在 View 的标题中包含js文件