webservice 发布问题 无法连接远程服务器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webservice 发布问题 无法连接远程服务器相关的知识,希望对你有一定的参考价值。

在单位局域网内有若干台服务器,在服务器A上发布一个webservice服务,想通过此webservice服务调用其它服务器上的数据库资源,服务器A在单位路由器上通过公网地址将80端口映射到公网上。现在的问题是:在单位内部使用此webservice可以调取到其它服务器上的数据,而其它单位通过公网可以看到webservic发布的服务,却无法调取其它服务器上的数据,出现的错误是无法连接到远程服务器。
请问:
1、只将A服务器地址映射到公网上,其它服务器不映射的这种方式是否可行?
2、出现这种错误是什么原因,如何解决?

    只映射A的地址是可行的,因为对其他服务器的调用是通过A,而不是通过公网。

    我觉得应该是只映射了80端口的问题,A发布的webservice是用的什么端口?是80端口么?如果不是,那显然是被防火墙限制了,所以会报无法连接。

参考技术A 查看网络是不是畅通的 参考技术B 你说的可以看到公网的发布的服务器是什么意思》

无法使用 php webservice 连接 unity 和 mysql

【中文标题】无法使用 php webservice 连接 unity 和 mysql【英文标题】:unable to connect unity and mysql using a php webservice 【发布时间】:2016-11-07 11:30:26 【问题描述】:

出于我的目的,我正在使用服务器端高分教程页面中的脚本。我稍微编辑了它,但它不起作用。该值未保存,我不断在 php 页面中收到此消息:

注意:未定义索引:第 6 行 C:\xampp\htdocs\unitypb\saveVerant.php 中的名称

注意:未定义索引:第 7 行 C:\xampp\htdocs\unitypb\saveVerant.php 中的值

注意:未定义索引:第 8 行 C:\xampp\htdocs\unitypb\saveVerant.php 中的哈希

这是php代码

<?php 
        $db = mysql_connect('localhost', 'root', '') or die('Could not connect: ' . mysql_error()); 
        mysql_select_db('unitypb') or die('Could not select database');

        // Strings must be escaped to prevent SQL injection attack. 
        $name = mysql_real_escape_string($_GET['name'], $db); 
        $score = mysql_real_escape_string($_GET['score'], $db); 
        $hash = $_GET['hash']; 

        $secretKey="mySecretKey"; # Change this value to match the value stored in the client javascript below 

        $real_hash = md5($name . $score . $secretKey); 
        if($real_hash == $hash)  
            // Send variables for the MySQL database class. 
            $query = "INSERT INTO verant VALUES (NULL,  '$name', '$score');"; 
            $result = mysql_query($query) or die('Query failed: ' . mysql_error()); 
         
?>

这是c#代码:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;

public class SQL_InputVS : MonoBehaviour 

    private string secretKey = "mySecretKey"; // Edit this value and make sure it's the same as the one stored on the server
    public string addScoreURL = "http://localhost/unitypb/saveVerant.php?"; //be sure to add a ? to your url


    Text text;

    void Awake ()
        text = transform.Find ("Text").GetComponent <Text> ();
    


    public void sendDatabase () 
        StartCoroutine (saveValue ("Verant-" + this.transform.name, text.text));
    


    IEnumerator saveValue (string name, string score) 

        //This connects to a server side php script that will add the name and score to a MySQL DB.
        // Supply it with a string representing the players name and the players score.
        string hash = Md5Sum (name + score + secretKey);

        string post_url = addScoreURL + "name=" + WWW.EscapeURL(name) + "&score=" + score+ "&hash=" + hash;

        // Post the URL to the site and create a download object to get the result.
        WWW hs_post = new WWW(post_url);
        yield return hs_post; // Wait until the download is done

        if (hs_post.error != null)
        
            print("There was an error: " + hs_post.error);
        

    

    public string Md5Sum(string strToEncrypt)
    
        System.Text.UTF8Encoding ue = new System.Text.UTF8Encoding();
        byte[] bytes = ue.GetBytes(strToEncrypt);

        // encrypt bytes
        System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
        byte[] hashBytes = md5.ComputeHash(bytes);

        // Convert the encrypted bytes back to a string (base 16)
        string hashString = "";

        for (int i = 0; i < hashBytes.Length; i++)
        
            hashString += System.Convert.ToString(hashBytes[i], 16).PadLeft(2, '0');
        

        return hashString.PadLeft(32, '0');
    

【问题讨论】:

警告:如果您只是学习 PHP,请不要使用mysql_query 接口。它是如此可怕和危险,以至于它在 PHP 7 中被删除。像 PDO is not hard to learn 这样的替代品和像 PHP The Right Way 这样的指南解释了最佳实践。 纯属记录,Spin。要获得高分,您只需使用 GameCenter 或 GooglePlayServices。它是完全免费的。这些天自己动手做是非常不现实的 @Naeim 和大家,感谢您的意见。我做到了,脚本现在运行得很好。似乎 c# 脚本是问题所在。我在这里搜索并找到了 Appymole 修改过的脚本,它适用于我的应用程序。 appymole.com/tutorial 你应该将你的解决方案组合成一个答案,以便其他遇到它的人也可以得到帮助。 @Spiningit,请添加对此问题的答案,以便它不会在待处理列表中保持打开状态,我只是浪费了我生命中的几分钟来看看如何帮助你,才意识到你' d 已经修好了。我相信其他人也会这样做...... 【参考方案1】:

引用 Spiningit 的评论。

我已经成功了,脚本现在运行得很好。似乎是 c# 脚本 是问题所在。我在这里搜索并找到了 Appymole 修改过的脚本 它适用于我的应用程序。 appymole.com/tutorial

【讨论】:

以上是关于webservice 发布问题 无法连接远程服务器的主要内容,如果未能解决你的问题,请参考以下文章

webService 无法连接连接oracle 11g

调用远程webservice时提示 无法自动进入并单步执行服务器,未能连接到服务器计算机

无法连接到远程服务器 - s-s-rS 2008 - webservice

webservice客户端调用服务端异常 —— 远程主机强迫关闭了一个现有的连接

C# 频繁调用WebService 产生 “连接远程服务器失败”异常

因为目标机器主动拒绝而无法建立连接?