GVKun编程网logo

Laravel 8:使用 HTTP 客户端时获取服务器 IP 地址(获取服务器ip和客户端ip的方法)

14

关于Laravel8:使用HTTP客户端时获取服务器IP地址和获取服务器ip和客户端ip的方法的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android获取服务器与客户端时差的实例代码

关于Laravel 8:使用 HTTP 客户端时获取服务器 IP 地址获取服务器ip和客户端ip的方法的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android 获取服务器与客户端时差的实例代码、C# 之 获取服务器IP,客户端IP以及其它、chttp2_server.cc:298:断言失败:*port_num == port_temp 在同一台机器上运行服务器和客户端时(仅在 Citrix 上)、html5 – 如何读取服务器上从客户端发送的HttpRequest数据等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

Laravel 8:使用 HTTP 客户端时获取服务器 IP 地址(获取服务器ip和客户端ip的方法)

Laravel 8:使用 HTTP 客户端时获取服务器 IP 地址(获取服务器ip和客户端ip的方法)

Laravel 的 api 中有一个函数:

Request::ip();

从中您可以从他对您的应用程序的请求中获取客户端 IP 或 您可以使用 php 方法访问 $_SERVER[] 数组中的客户端 IP 为:

$_SERVER['REMOTE_ADDR']

Android 获取服务器与客户端时差的实例代码

Android 获取服务器与客户端时差的实例代码

一般我们在做商品倒计时的时候会遇到要从后台获取商品的开始时间和结束时间,还要计算商品距离开始时间的倒计时和结束时间的倒计时,但是这样只是从后台获取到开始时间,还要再和手机系统的时间相减,才能获取到开始时间的倒计时,那问题来了,如果用户在手机上改了时间呢?是不是就会产生误差,很可能其他人还没开始,就已经有人可以抢购了,这样的体验效果就很差了,所以我们不仅要计算开始时间与当前时间的时差,还要计算服务器与客户端的时差,说了这么多,还是上代码吧:

1.在项目启动的时候获取时差并保存

/**
 * 获取时差并保存
 * @param context
 */
public static void getDifferenceTime(final Context context){
  new Thread(new Runnable() {
    @Override
    public void run() {
      try {
        URL url = new URL(CONTENT_URL);
        //生成URLConnection连接对象
        URLConnection uc = url.openConnection();
        //发出连接
        uc.connect();
        //获取服务器时间
        long serverTime = uc.getDate();
        //获取服务器时间与手机系统时间的时差
        long differenceTime = serverTime - System.currentTimeMillis();
        //保存时差
        SaveUtil.getInstance(context).setDifferenceTime(differenceTime);
      } catch (Exception e) {
        e.printstacktrace();
      }
    }
  }).start();
}

2.Adapter中计算开始时间倒计时

//获取列表中商品的开始时间
String startTimeStr = list.get(position).getStartTime();
long startTime = stringToLong(startTimeStr);
//活动开始时间-手机时间-服务器时间与手机时间的相差值 = 活动开始倒计时
long remainingTime = startTime - System.currentTimeMillis() - SaveUtil.getInstance(mContext).getDifferenceTime();

结束时间与上述方法相同,就不再次粘代码了。我知道需要需要改进的地方还有很多,大家不要喷的太厉害了~

以上这篇Android 获取服务器与客户端时差的实例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。

C# 之 获取服务器IP,客户端IP以及其它

C# 之 获取服务器IP,客户端IP以及其它

1、获取客户端IP:Request.ServerVariables.Get("Remote_Addr").ToString();

2、获取客户端主机名:Request.ServerVariables.Get("Remote_Host").ToString();

3、客户端浏览器:Request.Browser.Browser;

4、客户端浏览器 版本号:Request.Browser.MajorVersion;

5、客户端操作系统:Request.Browser.Platform;

6、获取服务器IP:Request.ServerVariables.Get("Local_Addr").ToString();

7、获取服务器名:Request.ServerVariables.Get("Server_Name").ToString();


如果你想进一步了解ServerVariables,可以用

 

foreach(String o in Request.ServerVariables){
    Response.Write(o+"="+Request.ServerVariables[o]+"<br>");
}

 

 

 

复制代码
string stringMAC = "";
   string stringIP = "";
   ManagementClass MC = new ManagementClass ("Win32_NetworkAdapterConfiguration");
   ManagementObjectCollection MOC= MC.GetInstances();

   foreach(ManagementObject MO in MOC)
   {
    if ((bool)MO["IPEnabled"] == true)
    {
       stringMAC += MO["MACAddress"].ToString(); //获取网卡的地址
       string[] IPAddresses = (string[]) MO["IPAddress"]; //获取本地的IP地址
       if(IPAddresses.Length > 0)
       stringIP = IPAddresses[0];
       Response.Write(stringMAC+"/"+stringIP);
     }
   }
复制代码

 

 



asp.net+c#如何获取客户端网卡的MAC地址?

复制代码
//要引用到以下两个命名空间
using System.Diagnostics;
using System.Text.RegularExpressions;

//获取远程客户端的网卡物理地址(MAC)
public string GetMac(string IP)   //para IP is the client''s IP
{
string dirResults="";
ProcessStartInfo psi = new ProcessStartInfo();
Process proc = new Process();
psi.FileName = "nbtstat";
psi.RedirectStandardInput = false;
psi.RedirectStandardOutput = true;
psi.Arguments = "-A " + IP;
psi.UseShellExecute = false;
proc = Process.Start(psi);
dirResults = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
dirResults=dirResults.Replace("\r","").Replace("\n","").Replace("\t","");

Regex reg=new Regex("Mac[ ]{0,}Address[ ]{0,}=[ ]{0,}(?<key>((.)*?))__MAC",RegexOptions.IgnoreCase|RegexOptions.Compiled);
Match mc=reg.Match(dirResults+"__MAC");

if(mc.Success)   
{
return mc.Groups["key"].Value;
}
else
{
reg=new Regex("Host not found",RegexOptions.IgnoreCase|RegexOptions.Compiled);
mc=reg.Match(dirResults);
if(mc.Success)
{
return "Host not found!";
}
else
{
return "";
}
}
}

//在页面上打印出客户端的网卡物理地址(MAC)
Response.Write(this.GetMac(Request.UserHostAddress.ToString()));
复制代码

 

 



 获取cpu序列号,硬盘ID,网卡MAC地址
private void GetInfo()
  {
   string cpuInfo = "";//cpu序列号
   ManagementClass cimobject = new ManagementClass("Win32_Processor");
   ManagementObjectCollection moc = cimobject.GetInstances();
   foreach(ManagementObject mo in moc)
   {
    cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
    Response.Write ("cpu序列号:"+cpuInfo.ToString ());
   }

   //获取硬盘ID
   String HDid;
   ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");
   ManagementObjectCollection moc1 = cimobject1.GetInstances();
   foreach(ManagementObject mo in moc1)
   {
    HDid = (string)mo.Properties["Model"].Value;
    Response.Write ("硬盘序列号:"+HDid.ToString ());
   }


   //获取网卡硬件地址

   ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
   ManagementObjectCollection moc2 = mc.GetInstances();
   foreach(ManagementObject mo in moc2)
   {
    if((bool)mo["IPEnabled"] == true)
     Response.Write("MAC address\t{0}"+mo["MacAddress"].ToString());
    mo.Dispose();
   }
  

 
分类:  C#
标签:  C#,  服务器,  IP

 

 

chttp2_server.cc:298:断言失败:*port_num == port_temp 在同一台机器上运行服务器和客户端时(仅在 Citrix 上)

chttp2_server.cc:298:断言失败:*port_num == port_temp 在同一台机器上运行服务器和客户端时(仅在 Citrix 上)

如何解决chttp2_server.cc:298:断言失败:*port_num == port_temp 在同一台机器上运行服务器和客户端时(仅在 Citrix 上)?

我们无法找到仅在 citrix 服务器上运行我们的应用程序时才会出现的问题的原因。

该应用程序是一个 Windows GUI 应用程序,在动态端口上启动 2 个 grpc 服务 - 一个 c++ 服务和第二个服务是在 c# 中实现的 .NET 组件。这两个服务在同一台机器上的同一进程中运行。 C++ 服务首先启动并使用 127.0.0.1:0 或 localhost:0 正常运行。当 c# 服务开始使用 127.0.0.1:0 时,它可以在我们的机器和一些客户的机器上运行,但在他们的 citrix 服务器上出现故障,我现在知道是什么导致了这种情况。

我们使用的是 grpc v1.12.0。此代码块末尾的断言会触发并终止我们的进程。

grpc_error* grpc_chttp2_server_add_port(grpc_server* server,const char* addr,grpc_channel_args* args,int* port_num) {
  grpc_resolved_addresses* resolved = nullptr;
  grpc_tcp_server* tcp_server = nullptr;
  size_t i;
  size_t count = 0;
  int port_temp;
  grpc_error* err = GRPC_ERROR_NONE;
  server_state* state = nullptr;
  grpc_error** errors = nullptr;
  size_t naddrs = 0;

  *port_num = -1;

  /* resolve address */
  err = grpc_blocking_resolve_address(addr,"https",&resolved);
  if (err != GRPC_ERROR_NONE) {
    goto error;
  }
  state = static_cast<server_state*>(gpr_zalloc(sizeof(*state)));
  GRPC_CLOSURE_INIT(&state->tcp_server_shutdown_complete,tcp_server_shutdown_complete,state,grpc_schedule_on_exec_ctx);
  err = grpc_tcp_server_create(&state->tcp_server_shutdown_complete,args,&tcp_server);
  if (err != GRPC_ERROR_NONE) {
    goto error;
  }

  state->server = server;
  state->tcp_server = tcp_server;
  state->args = args;
  state->shutdown = true;
  gpr_mu_init(&state->mu);

  naddrs = resolved->naddrs;
  errors = static_cast<grpc_error**>(gpr_malloc(sizeof(*errors) * naddrs));
  for (i = 0; i < naddrs; i++) {
    errors[i] =
        grpc_tcp_server_add_port(tcp_server,&resolved->addrs[i],&port_temp);
    if (errors[i] == GRPC_ERROR_NONE) {
      if (*port_num == -1) {
        *port_num = port_temp;
      } else {
        GPR_ASSERT(*port_num == port_temp);
      }
      count++;
    }
  }

即使使用 GRPC_VERBOSITY=debug 和 GRPC_TRACE=all 我也看不到任何错误或有用的提示。

然后日志只显示:

I0727 10:10:51.045681 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\lib\surface\init.cc:155: grpc_init(void)
I0727 10:10:51.045681 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\lib\surface\server.cc:944: grpc_server_create(0000009E5A5AA470,0000000000000000)
I0727 10:10:51.045681 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\lib\surface\server.cc:930: grpc_server_register_completion_queue(server=0000009E5A40CAA0,cq=0000009E59D52FD0,reserved=0000000000000000)
I0727 10:10:51.045681 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\lib\surface\server.cc:930: grpc_server_register_completion_queue(server=0000009E5A40CAA0,cq=0000009E59D53490,cq=0000009E59D52D70,cq=0000009E59D536F0,reserved=0000000000000000)
I0727 10:10:51.061313 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\ext\transport\chttp2\server\insecure\server_chttp2.cc:34: grpc_server_add_insecure_http2_port(server=0000009E5A40CAA0,addr=localhost:0)
E0727 10:10:51.061313 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\ext\transport\chttp2\server\chttp2_server.cc:298: assertion Failed: *port_num == port_temp

非常欢迎任何可能原因的暗示。

在向 grpc 添加更多日志消息后,我可以看到实际上有 2 个不同的地址,涉及不同的端口([::1]:20530 和 [::ffff:127.0.0.1]:20532)

I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\ext\transport\chttp2\server\insecure\server_chttp2.cc:34: grpc_server_add_insecure_http2_port(server=000000DA0EF73120,addr=localhost:0)
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\ext\transport\chttp2\server\chttp2_server.cc:291: WARNING: Zk,grpc_chttp2_server_add_port: naddrs = 2
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\ext\transport\chttp2\server\chttp2_server.cc:298: WARNING: Zk,before grpc_tcp_server_add_port: port_temp = 484827504,resolved->addrs[0] = [::1]:0
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\lib\iomgr\tcp_server_windows.cc:501: Warning: Zk: grpc_sockaddr_to_v4mapped returned false
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\lib\iomgr\tcp_server_windows.cc:513: Warning: Zk: grpc_sockaddr_is_wildcard returned false
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\lib\iomgr\tcp_server_windows.cc:194: Warning: Zk: before grpc_tcp_prepare_socket
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\lib\iomgr\tcp_server_windows.cc:200: Warning: Zk: before bind
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\lib\iomgr\tcp_server_windows.cc:207: Warning: Zk: before listen
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\lib\iomgr\tcp_server_windows.cc:213: Warning: Zk: before getsockname
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\lib\iomgr\tcp_server_windows.cc:222: Warning: Zk: before grpc_sockaddr_get_port
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\lib\iomgr\tcp_server_windows.cc:226: Warning: Zk: sockname_temp: [::1]:20530
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\ext\transport\chttp2\server\chttp2_server.cc:306: WARNING: Zk,after grpc_tcp_server_add_port: port_temp = 20530,errors[i] = 0
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\ext\transport\chttp2\server\chttp2_server.cc:298: WARNING: Zk,before grpc_tcp_server_add_port: port_temp = 20530,resolved->addrs[1] = 127.0.0.1:0
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\lib\iomgr\tcp_server_windows.cc:496: Warning: Zk: grpc_sockaddr_to_v4mapped returned true
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\lib\iomgr\tcp_server_windows.cc:513: Warning: Zk: grpc_sockaddr_is_wildcard returned false
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\lib\iomgr\tcp_server_windows.cc:194: Warning: Zk: before grpc_tcp_prepare_socket
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\lib\iomgr\tcp_server_windows.cc:200: Warning: Zk: before bind
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\lib\iomgr\tcp_server_windows.cc:207: Warning: Zk: before listen
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\lib\iomgr\tcp_server_windows.cc:213: Warning: Zk: before getsockname
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\lib\iomgr\tcp_server_windows.cc:222: Warning: Zk: before grpc_sockaddr_get_port
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\lib\iomgr\tcp_server_windows.cc:226: Warning: Zk: sockname_temp: [::ffff:127.0.0.1]:20532
I0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\ext\transport\chttp2\server\chttp2_server.cc:306: WARNING: Zk,after grpc_tcp_server_add_port: port_temp = 20532,errors[i] = 0
E0727 14:22:16.875600 0 E:\grpc-v1.12.0\grpc\src\core\ext\transport\chttp2\server\chttp2_server.cc:313: assertion Failed: *port_num == port_temp

解决方法

原因是我们使用 localhost 作为 .NET grpc 服务而不是 127.0.0.1

ports = new ServerPort("localhost",ServerCredentials.Insecure);

Grpc_blocking_resolve_address 从而为 ipv4 和 ipv6 提供了地址。然后为这两个地址调用 grpc_tcp_server_add_port 并传递导致断言的 2 个不同端口。 不幸的是,这里的 Grpc 中没有诊断选项。

将 localhost 更改为 127.0.0.1 后,应用程序工作正常。

ports = new ServerPort("127.0.0.1",ServerCredentials.Insecure);

html5 – 如何读取服务器上从客户端发送的HttpRequest数据

html5 – 如何读取服务器上从客户端发送的HttpRequest数据

我如何从Dart中的客户端,服务器上读取POST方法发送的HttpRequest数据?

我从客户端发送一条消息,如下所示:

HttpRequest request = new HttpRequest();
var url = "http://127.0.0.1:8081";
request.open("POST",url,async: false);

String data = 'hello from client'; 
request.send(data);

在服务器上,我正在捕获这样的请求:

HttpServer.bind('127.0.0.1',8081).then((server) {
server.listen((HttpRequest request) {

//DATA SHOULD BE READ HERE 



});
});

但我无法弄清楚如何实际读取数据… HttpRequest中没有数据属性也没有其他任何东西……

编辑这是我现在得到答案的方式:

HttpServer.bind('127.0.0.1',8081).then((server) {
server.listen((HttpRequest request) {
  //DATA SHOULD BE READ HERE 
  print("got it");
  print(request.method);
  if(request.method == "POST") {
    print("got it 2");
    List<int> dataBody = new List<int>();
    request.listen(dataBody.addAll,onDone: () {
      var postData = new String.fromCharCodes(dataBody);
      print(postData);
      });
    }
 });
});

但由于某种原因,request.method不是“POST”而是“OPTIONS”,如果我改为if(request.method ==“OPTIONS”),那么print(postData)仍然不会返回任何内容……

解决方法

您可以使用StringDecoder从HttpRequest中的“List of Int”转换为“String”.因为无论你发送json,纯文本还是png,Dart总是以数据的形式发送数据
“服务器列表”到服务器.另一种方法是使用在Heroku Steam上测试的Streams( http://www.dartlang.org/articles/feet-wet-streams/)v0.6.2 Dart编辑器0.4.3_r20602 Dat SDK 0.4.3.5_r26062

例如,

客户端:

import 'dart:html';
 import 'dart:json' as Json;
 import 'dart:async';
 import 'dart:uri';
 final String data = 'Hello World!';
 void _sendpnG(String pngData) {
 HttpRequest request = new HttpRequest(); // create a new XHR
 // add an event handler that is called when the request finishes
 request.onReadyStateChange.listen((_) 
 {
 if (request.readyState == HttpRequest.DONE &&
 (request.status == 200 || request.status == 0)) {
 // data saved OK.
 print(request.responseText); // output the response from the server
 }
                  }
 );
 // POST the data to the server Async
 print('Sending Photos to the server...');
 var url = "/png";
 request.open("POST",url);
 request.setRequestHeader("Content-Type","text/plain");
 request.send(data);
 }

服务器:

import 'dart:io';
 import 'dart:async';
 import 'dart:json' as Json;
 import "package:stream/stream.dart";
 import 'package:xml/xml.dart' as xml;
 import 'package:unittest/unittest.dart';
 import 'package:rikulo_commons/mirrors.dart';
 void receivePNG(HttpConnect connect){
 var request = connect.request;
 var response = connect.response;
 if(request.uri.path == '/png' && request.method == 'POST')
  {
   String png='';
   response.write('The server received png request!');
   //read incoming List<int> data from request and use StringDecoder to transform   incoming data to string
   var stream = request.transform(new StringDecoder());
   stream.listen((value){
   print(value);
   //Hello World!
  }
  else
  {
   response.write('error');
   response.statusCode = HttpStatus.NOT_FOUND;
   connect.close();
   }
  }

configure.dart

var _mapping = {
  "/": home,"/png": receivePNG,};

我们今天的关于Laravel 8:使用 HTTP 客户端时获取服务器 IP 地址获取服务器ip和客户端ip的方法的分享就到这里,谢谢您的阅读,如果想了解更多关于Android 获取服务器与客户端时差的实例代码、C# 之 获取服务器IP,客户端IP以及其它、chttp2_server.cc:298:断言失败:*port_num == port_temp 在同一台机器上运行服务器和客户端时(仅在 Citrix 上)、html5 – 如何读取服务器上从客户端发送的HttpRequest数据的相关信息,可以在本站进行搜索。

本文标签: