Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复Xamarin.Forms中的EconReset?_Xamarin_Xamarin.forms_Xamarin.android - Fatal编程技术网

如何修复Xamarin.Forms中的EconReset?

如何修复Xamarin.Forms中的EconReset?,xamarin,xamarin.forms,xamarin.android,Xamarin,Xamarin.forms,Xamarin.android,我已经声明这个HttpClient=newhttpclient()我的项目的每个视图中都有一次。我有一个名为syncpage的页面,这个同步页面有多个POSTASYN功能。当我严格测试我的应用程序时,我遇到了一个错误 Java.Net.SocketException:recvfrom失败:EconReset(由对等方重置连接) 我怎样才能解决这个问题或在将来防止它 下面是我的同步的示例代码。有两个同步功能将按顺序执行。如何改进代码 HttpClient client = new HttpClie

我已经声明这个HttpClient=newhttpclient()我的项目的每个视图中都有一次。我有一个名为syncpage的页面,这个同步页面有多个POSTASYN功能。当我严格测试我的应用程序时,我遇到了一个错误

Java.Net.SocketException:recvfrom失败:EconReset(由对等方重置连接)

我怎样才能解决这个问题或在将来防止它

下面是我的同步的示例代码。有两个同步功能将按顺序执行。如何改进代码

HttpClient client = new HttpClient();

public async void FirstTimeSyncUser(string host, string database, string contact, string ipaddress)
    {
        try
        {
            syncStatus.Text = "Checking internet connection";

            string apifile = "first-time-sync-user-api.php";

            if (CrossConnectivity.Current.IsConnected)
            {
                syncStatus.Text = "Initializing first-time user sync";

                var db = DependencyService.Get<ISQLiteDB>();
                var conn = db.GetConnection();

                var getData = conn.QueryAsync<UserTable>("SELECT * FROM tblUser WHERE ContactID = ? AND Deleted != '1'", contact);
                var resultCount = getData.Result.Count;

                var current_datetime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                int count = 1;

                var settings = new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore,
                    MissingMemberHandling = MissingMemberHandling.Ignore
                };

                if (resultCount == 0)
                {
                    syncStatus.Text = "Getting user data from the server";

                    var link = "http://" + ipaddress + "/" + Constants.apifolder + "/api/" + apifile;
                    string contentType = "application/json";
                    JObject json = new JObject
                    {
                        { "Host", host },
                        { "Database", database },
                        { "ContactID", contact }
                    };

                     client.DefaultRequestHeaders.ConnectionClose = false;

                    var response = await client.PostAsync(link, new StringContent(json.ToString(), Encoding.UTF8, contentType));

                    if (response.IsSuccessStatusCode)
                    {
                        var content = await response.Content.ReadAsStringAsync();

                        if (!string.IsNullOrEmpty(content))
                        {
                            try
                            {
                                var dataresult = JsonConvert.DeserializeObject<List<UserData>>(content, settings);
                                var datacount = dataresult.Count;

                                for (int i = 0; i < datacount; i++)
                                {
                                    syncStatus.Text = "Syncing user " + count + " out of " + datacount;

                                    var item = dataresult[i];
                                    var userid = item.UserID;
                                    var usrpassword = item.UsrPassword;
                                    var usertypeid = item.UserTypeID;
                                    var userstatus = item.UserStatus;
                                    var lastsync = DateTime.Parse(current_datetime);
                                    var lastupdated = item.LastUpdated;
                                    var deleted = item.Deleted;

                                    var insertdata = new UserTable
                                    {
                                        UserID = userid,
                                        UsrPassword = usrpassword,
                                        ContactID = contact,
                                        UserTypeID = usertypeid,
                                        UserStatus = userstatus,
                                        LastSync = lastsync,
                                        LastUpdated = lastupdated,
                                        Deleted = deleted
                                    };

                                    await conn.InsertOrReplaceAsync(insertdata);

                                    count++;
                                }

                                synccount += "Total synced user: " + count + "\n";

                                var logType = "App Log";
                                var log = "Initialized first-time sync (<b>User</b>)  <br/>" + "App Version: <b>" + Constants.appversion + "</b><br/> Device ID: <b>" + Constants.deviceID + "</b>";
                                int logdeleted = 0;

                                Save_Logs(contact, logType, log, database, logdeleted);

                                Preferences.Set("userchangeslastcheck", current_datetime, "private_prefs");

                                FirstTimeSyncSystemSerial(host, database, contact, ipaddress);
                            }
                            catch
                            {
                                var retry = await DisplayAlert("Application Error", "Syncing failed. Failed to send the data.\n\n Error:\n\n" + content + "\n\n Do you want to retry?", "Yes", "No");

                                if (retry.Equals(true))
                                {
                                    FirstTimeSyncUser(host, database, contact, ipaddress);
                                }
                                else
                                {
                                    First_Time_OnSyncFailed();
                                }
                            }
                        }
                        else
                        {
                            Preferences.Set("userchangeslastcheck", current_datetime, "private_prefs");

                            FirstTimeSyncSystemSerial(host, database, contact, ipaddress);
                        }
                    }
                    else
                    {
                        var retry = await DisplayAlert("Application Error", "Syncing failed. Server is unreachable.\n\n Error:\n\n"+ response.StatusCode +" Do you want to retry?", "Yes", "No");

                        if (retry.Equals(true))
                        {
                            FirstTimeSyncUser(host, database, contact, ipaddress);
                        }
                        else
                        {
                            First_Time_OnSyncFailed();
                        }
                    }
                }
                else
                {
                    SyncUserClientUpdate(host, database, contact, ipaddress);
                }
            }
            else
            {
                var retry = await DisplayAlert("Application Error", "Syncing failed. Please connect to the internet to sync your data. Do you want to retry?", "Yes", "No");

                if (retry.Equals(true))
                {
                    FirstTimeSyncUser(host, database, contact, ipaddress);
                }
                else
                {
                    First_Time_OnSyncFailed();
                }
            }
        }
        catch (Exception ex)
        {
            Crashes.TrackError(ex);
            var retry = await DisplayAlert("Application Error", "Syncing failed. Failed to send the data.\n\n Error:\n\n" + ex.Message.ToString() + "\n\n Do you want to retry?", "Yes", "No");

            if (retry.Equals(true))
            {
                FirstTimeSyncUser(host, database, contact, ipaddress);
            }
            else
            {
                First_Time_OnSyncFailed();
            }
        }
    }

    public async void SyncUserClientUpdate(string host, string database, string contact, string ipaddress)
    {
        try
        {
            syncStatus.Text = "Checking internet connection";

            string apifile = "sync-user-client-update-api.php";

             client.DefaultRequestHeaders.ConnectionClose = false;

            if (CrossConnectivity.Current.IsConnected)
            {
                syncStatus.Text = "Initializing user client changes sync";

                var db = DependencyService.Get<ISQLiteDB>();
                var conn = db.GetConnection();

                var datachanges = conn.QueryAsync<UserTable>("SELECT * FROM tblUser WHERE ContactID = ? AND LastUpdated > LastSync AND Deleted != '1'", contact);
                var changesresultCount = datachanges.Result.Count;

                var current_datetime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

                var settings = new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore,
                    MissingMemberHandling = MissingMemberHandling.Ignore
                };

                if (changesresultCount > 0)
                {
                    int clientupdate = 1;

                    for (int i = 0; i < changesresultCount; i++)
                    {
                        syncStatus.Text = "Sending user changes to server " + clientupdate + " out of " + changesresultCount;

                        var result = datachanges.Result[i];
                        var userid = result.UserID;
                        var usrpassword = result.UsrPassword;
                        var usertypeid = result.UserTypeID;
                        var userstatus = result.UserStatus;
                        var lastsync = DateTime.Parse(current_datetime);
                        var lastupdated = result.LastUpdated;
                        var deleted = result.Deleted;

                        var link = "http://" + ipaddress + "/" + Constants.apifolder + "/api/" + apifile;
                        string contentType = "application/json";
                        JObject json = new JObject
                        {
                            { "Host", host },
                            { "Database", database },
                            { "UserID", userid },
                            { "UsrPassword", usrpassword },
                            { "ContactID", contact },
                            { "UserTypeID", usertypeid },
                            { "UserStatus", userstatus },
                            { "LastUpdated", lastupdated },
                            { "Deleted", deleted }
                        };

                        var response = await client.PostAsync(link, new StringContent(json.ToString(), Encoding.UTF8, contentType));

                        if (response.IsSuccessStatusCode)
                        {
                            var content = await response.Content.ReadAsStringAsync();
                            if (!string.IsNullOrEmpty(content))
                            {
                                try
                                {
                                    var dataresult = JsonConvert.DeserializeObject<List<ServerMessage>>(content, settings);

                                    var dataitem = dataresult[0];
                                    var datamessage = dataitem.Message;

                                    if (datamessage.Equals("Inserted"))
                                    {
                                        await conn.QueryAsync<UserTable>("UPDATE tblUsers SET LastSync = ? WHERE ContactID = ?", DateTime.Parse(current_datetime), contact);

                                        clientupdate++;
                                    }
                                    else
                                    {
                                        var retry = await DisplayAlert("Application Error", "Syncing failed. Failed to send the data.\n\n Error:\n\n" + datamessage + "\n\n Do you want to retry?", "Yes", "No");

                                        if (retry.Equals(true))
                                        {
                                            SyncUserClientUpdate(host, database, contact, ipaddress);
                                        }
                                        else
                                        {
                                            OnSyncFailed();
                                        };
                                    }
                                }
                                catch
                                {
                                    var retry = await DisplayAlert("Application Error", "Syncing failed. Failed to send the data.\n\n Error:\n\n" + content + "\n\n Do you want to retry?", "Yes", "No");

                                    if (retry.Equals(true))
                                    {
                                        SyncUserClientUpdate(host, database, contact, ipaddress);
                                    }
                                    else
                                    {
                                        OnSyncFailed();
                                    }
                                }
                            }
                        }
                        else
                        {
                            var retry = await DisplayAlert("Application Error", "Syncing failed. Server is unreachable.\n\n Error:\n\n"+ response.StatusCode +" Do you want to retry?", "Yes", "No");

                            if (retry.Equals(true))
                            {
                                SyncUserClientUpdate(host, database, contact, ipaddress);
                            }
                            else
                            {
                                OnSyncFailed();
                            }
                        }
                    }

                    synccount += "Total synced client user update: " + clientupdate + "\n";

                    var logType = "App Log";
                    var log = "Sent client updates to the server (<b>User</b>)  <br/>" + "App Version: <b>" + Constants.appversion + "</b><br/> Device ID: <b>" + Constants.deviceID + "</b>";
                    int logdeleted = 0;

                    Save_Logs(contact, logType, log, database, logdeleted);

                    SyncUserServerUpdate(host, database, contact, ipaddress);
                }
                else
                {
                    SyncUserServerUpdate(host, database, contact, ipaddress);
                }
            }
            else
            {
                var retry = await DisplayAlert("Application Error", "Syncing failed. Please connect to the internet to sync your data. Do you want to retry?", "Yes", "No");

                if (retry.Equals(true))
                {
                    SyncUserClientUpdate(host, database, contact, ipaddress);
                }
                else
                {
                    OnSyncFailed();
                }
            }
        }
        catch (Exception ex)
        {
            Crashes.TrackError(ex);
            var retry = await DisplayAlert("Application Error", "Syncing failed. Failed to send the data.\n\n Error:\n\n" + ex.Message.ToString() + "\n\n Do you want to retry?", "Yes", "No");

            if (retry.Equals(true))
            {
                SyncUserClientUpdate(host, database, contact, ipaddress);
            }
            else
            {
                OnSyncFailed();
            };
        }
    }
HttpClient=newhttpclient();
公共异步void FirstTimeSyncUser(字符串主机、字符串数据库、字符串联系人、字符串IP地址)
{
尝试
{
syncStatus.Text=“正在检查internet连接”;
string apifile=“first time sync user api.php”;
if(交叉连接.当前.断开连接)
{
syncStatus.Text=“初始化首次用户同步”;
var db=DependencyService.Get();
var conn=db.GetConnection();
var getData=conn.QueryAsync(“从tblUser中选择*其中ContactID=?并删除!='1',contact”);
var resultCount=getData.Result.Count;
var current_datetime=datetime.Now.ToString(“yyyy-MM-dd HH:MM:ss”);
整数计数=1;
var设置=新的JsonSerializerSettings
{
NullValueHandling=NullValueHandling.Ignore,
MissingMemberHandling=MissingMemberHandling.Ignore
};
if(resultCount==0)
{
syncStatus.Text=“从服务器获取用户数据”;
var link=“http://”+ipaddress+“/”+Constants.apifolder+“/api/”+apfile;
字符串contentType=“application/json”;
JObject json=新的JObject
{
{“主机”,主机},
{“数据库”,数据库},
{“联系人ID”,联系人}
};
client.DefaultRequestHeaders.ConnectionClose=false;
var response=wait client.PostAsync(链接,新的StringContent(json.ToString(),Encoding.UTF8,contentType));
if(响应。IsSuccessStatusCode)
{
var content=await response.content.ReadAsStringAsync();
如果(!string.IsNullOrEmpty(content))
{
尝试
{
var dataresult=JsonConvert.DeserializeObject(内容、设置);
var datacount=dataresult.Count;
对于(int i=0;i“+”应用程序版本:“+Constants.appversion+”
设备ID:“+Constants.deviceID+”; int logdeleted=0; 保存日志(联系人、日志类型、日志、数据库、日志删除); Preferences.Set(“userchangeslastcheck”、当前日期时间、“private\u prefs”); FirstTimeSyncSystemSerial(主机、数据库、联系人、IP地址); } 抓住 { var retry=wait DisplayAlert(“应用程序错误”,“同步失败。发送数据失败”。\n\n错误:\n\n“+内容+”\n\n是否重试?”,“是”,“否”); if(retry.Equals(true)) { FirstTimeSyncUser(主机、数据库、联系人、IP地址); } 其他的 { 第一次同步失败(); } } } 其他的 { Preferences.Set(“userchangeslastcheck”、当前日期时间、“private\u prefs”); F