将字符串从c#发送到php页面&;接收响应
本文关键字:amp 响应 页面 php 字符串 | 更新日期: 2023-09-27 18:10:47
[答案]
我原来的帖子的答案是有标记的(Kimmax的第一个帖子(
事实证明,我一开始应该提到这是(目前(在Android模拟器之外运行的。我发现通过模拟器连接到本地主机的IP是"10.0.2.2
"。拥有端口号似乎并不重要。尽可能地运行相同的代码,返回页面文本。这意味着是安卓系统中的某些东西导致了这个问题。希望这篇文章能为其他人节省一些时间。
[原件]
我是web/socket编程的新手,所以我不知道任何特定于它的常见做法。我正在尝试向php页面(我控制(发送一个相当短的字符串(最多32个字符(。然后,php页面将根据需要处理该字符串,并将响应字符串发送回发送方。这是客户端和服务器之间所需的连接范围(按时间(。我在网上搜索了一个简单的答案,但似乎找不到任何答案。我希望这里有人能帮忙。
例如:假设初始请求字符串是一个名称("Bob"(。服务器上的php页面接收到它,并通过处理计算出正确的返回字符串/值(比如年龄"31"(。然后,这个字符串/值被发送给原始请求者并由原始请求者接收,以便根据需要进行处理。
我只是在寻找最简短、最基本的答案。现在,服务器是一个wamplocalhost,我正在子目录(localhost/subdr/test.php(中测试php页面
[编辑]
使用Kimmax示例后的代码示例:
C#
public String DownloadFrom(String url)
{
string str = ""; // For debugging only
try
{
using(WebClient client = new WebClient())
{
str = client.DownloadString(new Uri(url));
return str;
}
catch(WebException e) {
Log.Error ("Error while receiving data from server:", e.Message);
return null;
}
}
}
传递给该函数的值为"http://localhost/php/test.php?name=Bob
">
test.php:
<?php
include 'logging.php';
if(isset($_GET['name']) && !empty($_GET['name']))
{
$data = $_GET['name'];
logg("test.php: name received: " . $data);
$download = "Test string.";
logg("test.php: setting data for download: " . $download);
print $download;
}
?>
logging.php文件提供了logg
函数,它只是将给定的字符串附加到其他文件中。当您在浏览器中输入地址时,test.php页面将输出$download
,但给定的C#代码不会返回任何内容。即使是日志文件也不会通过C#代码写入。经过一些调试,我注意到抛出了WebException
。异常消息为"Error: ConnectFailure (Connection refused)
"。
完全异常堆栈跟踪:
e {System.Net.WebException: Error: ConnectFailure (Connection refused) ---> System.Net.Sockets.SocketException: Connection refused
at System.Net.Sockets.Socket.Connect (System.Net.EndPoint remoteEP) [0x00000] in <filename unknown>:0
at System.Net.WebConnection.Connect (System.Net.HttpWebRequest request) [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0
at System.Net.HttpWebRequest.GetResponse () [0x00000] in <filename unknown>:0
at System.Net.WebClient.GetWebResponse (System.Net.WebRequest request) [0x00000] in <filename unknown>:0
at System.Net.WebClient.ReadAll (System.Net.WebRequest request, System.Object userToken) [0x00000] in <filename unknown>:0
at System.Net.WebClient.DownloadDataCore (System.Uri address, System.Object userToken) [0x00000] in <filename unknown>:0 } System.Net.WebException
我能够在telnet localhost 80
GET
期间得到返回的文本,所以看起来连接应该是可行的。我是不是在某个地方缺少一些权限?
[编辑]
在完全禁用防火墙并在路由器上设置端口转发后,一切都没有改变——目前我不排除任何可能性。我还尝试使用本地IP地址(127.0.0.1(而不是localhost
。访问.log的代码段:
...
192.168.1.1 - - [01/Jul/2014:11:48:18 -0500] "GET /HNAP1/ HTTP/1.1" 404 292
192.168.1.1 - - [01/Jul/2014:11:48:18 -0500] "POST /JNAP/ HTTP/1.1" 404 291
192.168.1.1 - - [01/Jul/2014:11:48:18 -0500] "GET / HTTP/1.1" 200 4821
127.0.0.1 - - [01/Jul/2014:11:50:06 -0500] "GET /php/test.php?s=Bob HTTP/1.1" 200 16
127.0.0.1 - - [01/Jul/2014:11:50:11 -0500] "GET /php/test.php?s=Foo HTTP/1.1" 200 16
127.0.0.1 - - [01/Jul/2014:11:50:15 -0500] "GET /php/test.php?s=Bar HTTP/1.1" 200 16
最后三行是我在浏览器(Chrome(中输入的链接。我相信前三个来自C#代码——奇怪的是,我认为它们是在我停止调试之后编写的。
apache_error.log
文件中似乎没有为这些连接尝试转储任何内容
我一定忽略了一些微小的细节。。。
如果您只想从网站接收响应,我建议使用WebClient
类及其.DowloadString()
方法。
示例
whatsmyname.php
<?php
$name = $_GET['name'];
echo "Your name is $name."
?>
whatsmyname.cs
private void btnSayMyName_Click(object sender, EventArgs e)
{
string response = SendRequest("http://localhost/whatsmyname.php?name=" + txtMyName.Text);
if(response != null)
{
MessageBox.Show(response, "Hey there!", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private string SendRequest(string url)
{
try
{
using (WebClient client = new WebClient())
{
return client.DownloadString(new Uri(url));
}
}
catch(WebException ex)
{
MessageBox.Show("Error while receiving data from the server:'n" + ex.Message, "Something broke.. :(", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
return null;
}
}
请阅读这篇文章来了解发生了什么,这是非常基本的。