Android实时获得经纬度,发送给c++服务端
Android 客户端:

package com.example.admin.gpsget; import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager; import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.Button;
import android.widget.Toast;
import android.view.View; import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Timer;
import java.util.TimerTask; import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message; import static java.lang.Thread.sleep; import java.util.Timer;
import java.util.TimerTask; public class MainActivity extends AppCompatActivity implements Runnable
{
private LocationManager locationManager; private final String SERVER_HOST_IP = "10.41.239.240"; /* 服务器端口 */
private final int SERVER_HOST_PORT = 9400; private Button btnConnect;
private Button btnSend;
private EditText show;
private Socket socket;
private PrintStream output;
private Thread thread; public void toastText(String message)
{
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
} public void handleException(Exception e, String prefix)
{
e.printStackTrace();
toastText(prefix + e.toString());
} @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initView(); // 获取系统LocationManager服务
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// 从GPS获取最近的定位信息 Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
updateView(location); // 将location里的位置信息显示在EditText中 /* 设置每2秒获取一次GPS的定位信息 */ locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 1, new LocationListener() { @Override
public void onLocationChanged(Location location) {
// 当GPS定位信息发生改变时,更新位置
updateView(location);
} @Override
public void onProviderDisabled(String provider) {
updateView(null);
} @Override
public void onProviderEnabled(String provider) {
// 当GPS LocationProvider可用时,更新位置
updateView(locationManager.getLastKnownLocation(provider)); } @Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
}
}); thread=new Thread(this);
thread.start();
btnConnect.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v)
{
// initClientSocket();
}
}); btnSend.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
sendMessage(show.getText().toString());
}
}); }
private void updateView(Location location) {
if (location != null) {
StringBuffer sb = new StringBuffer();
sb.append("position: \nlat:");
sb.append(location.getLongitude());
sb.append("\nlng:");
sb.append(location.getLatitude());
sb.append("\nhight:");
sb.append(location.getAltitude());
sb.append("\nspeed:");
sb.append(location.getSpeed());
sb.append("\ndirection:");
sb.append(location.getBearing());
sb.append("\njingdu:");
sb.append(location.getAccuracy());
sb.append("\n");
show.setText(sb.toString());
} else {
// 如果传入的Location对象为空则随便显示点东西
show.setText("juygfugf");
}
} public void initView()
{
btnConnect = (Button)findViewById(R.id.btnConnect);
btnSend = (Button)findViewById(R.id.btnSend);
show = (EditText) findViewById(R.id.editText); btnSend.setEnabled(false);
show.setEnabled(false);
} public void closeSocket()
{
try
{
output.close();
socket.close();
}
catch (IOException e)
{
handleException(e, "close exception: ");
}
} private void initClientSocket()
{
try
{
/* 连接服务器 */
socket = new Socket(SERVER_HOST_IP, SERVER_HOST_PORT); /* 获取输出流 */
output = new PrintStream(socket.getOutputStream(), true, "utf-8"); btnConnect.setEnabled(false);
btnSend.setEnabled(true);
}
catch (UnknownHostException e)
{
handleException(e, "unknown host exception: " + e.toString());
}
catch (IOException e) {
handleException(e, "io exception: " + e.toString());
}
} private void sendMessage(String msg)
{
output.print(msg);
} @Override
public void run() {
initClientSocket();
while (true)
{
try {
Thread.currentThread().sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace(); }
sendMessage(show.getText().toString());
} }
}

AndroidManifest.xml添加:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
界面如下:

c++服务端:

#include <WinSock2.h>
#include <stdio.h>
#include <Windows.h> #pragma comment(lib,"ws2_32.lib") int main(int argc,char *argv[])
{ short port; port=9400;
WSADATA wsa; if (WSAStartup(MAKEWORD(2,2),&wsa)!=0)
{
printf("socket init error");
exit(-1);
} SOCKET serverSocket; if((serverSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET)
{
printf("创建套接字失败!");
exit(-1);
} struct sockaddr_in serverAddress;
memset(&serverAddress,0,sizeof(sockaddr_in));
serverAddress.sin_family=AF_INET;
serverAddress.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
serverAddress.sin_port=htons(port); if (bind(serverSocket,(sockaddr*)&serverAddress,sizeof(serverAddress))==SOCKET_ERROR)
{
printf("socket port error:%d",port);
exit(-1);
} if (listen(serverSocket,SOMAXCONN)==SOCKET_ERROR)
{
printf("listen error");
exit(-1);
}
printf("Server 9400 is listening......\n");
SOCKET clientSocket;
struct sockaddr_in clientAddress; memset(&clientAddress,0,sizeof(clientAddress));
int addrlen=sizeof(clientAddress); if ((clientSocket=accept(serverSocket,(sockaddr*)&clientAddress,&addrlen))==INVALID_SOCKET)
{
printf("link error");
exit(-1);
} char buf[4096]; while (1)
{
int bytes=recv(clientSocket,buf,sizeof(buf),0); /* if ((bytes=recv(clientSocket,buf,sizeof(buf),0))==SOCKET_ERROR)
{
printf("data error");
exit(-1);
}*/ buf[bytes]='\0';
printf("Message from %s:\n %s\n",inet_ntoa(clientAddress.sin_addr),buf);
// if(send(clientSocket,buf,bytes,0)==SOCKET_ERROR)
// {
// printf("发送数据失败!");
//// exit(-1);
// } } WSACleanup();
exit(-1); }


Android实时获得经纬度,发送给c++服务端的更多相关文章
- android上传图片、视频、文件,服务端使用wcf接收
最近一直在搞android上传图片.视频.文件,服务端使用wcf接收,本文对调试中的遇到的问题进行记录. 首先android上传一些小图片是比较容易的一天下来差不多就能调试出来,但是上传一些大的文件时 ...
- 浅谈android Socket 通信及自建ServerSocket服务端常见问题
摘 要:TCP/IP通信协议是可靠的面向连接的网络协议,它在通信两端各建立一个Socket,从而在两端形成网络虚拟链路,进而应用程序可通过可以通过虚拟链路进行通信.Java对于基于TCP协议的网络通 ...
- Android应用源码图书馆管理系统带服务端数据库
本项目是一套基于安卓的图书馆管理系统,包括jsp服务端源码,安卓客户端源码和mysql数据库.代码比较简单,供学习anroid与j2ee交互.例如Sqlite的使用.安卓客户端与jsp的web服务端的 ...
- IOS 推送消息 php做推送服务端
IOS推送消息是许多IOS应用都具备的功能,最近也在研究这个功能,参考了很多资料终于搞定了,下面就把步骤拿出来分享下: iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPh ...
- TYPESDK手游聚合SDK服务端设计思路与架构之三:流程优化之订单保存与通知
经过前两篇文字的分析与设计,我们已经可以搭建出一个能够支持多游戏多渠道的聚合SDK服务端,但这只是理想化状态下的一个简化模型.如果接入渠道的逻辑都是按照理想化的简化过程来构建,那么对于支付的请求,我们 ...
- 手写内网穿透服务端客户端(NAT穿透)原理及实现
Hello,I'm Shendi. 这天心血来潮,决定做一个内网穿透的软件. 用过花生壳等软件的就知道内网穿透是个啥,干嘛用的了. 我们如果有服务器(比如tomcat),实际上我们在电脑上开启了服务器 ...
- TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析
TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...
- eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(二)
eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(二) 接上篇博客,本篇博客主要包含两个内容: 4.使用Android studio创建webservice客 ...
- eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(一)
eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(一) 本篇博客主要包含五个内容: 1.CXF换将搭建以及eclipse配置CXF. 2.eclipse创建w ...
随机推荐
- 牛客OI周赛8-提高组A-用水填坑
牛客OI周赛8-提高组A-用水填坑 题目 链接: https://ac.nowcoder.com/acm/contest/403/A 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制: ...
- (转)ELK Stack 中文指南--性能优化
https://www.bookstack.cn/read/ELKstack-guide-cn/elasticsearch-README.md https://blog.csdn.net/cjfeii ...
- 使用grunt搭建自动化的web前端开发环境
使用grunt搭建自动化的web前端开发环境 我们一定经常听过grunt和gulp,它们都是用于搭建自动化的web前端开发环境的,这里主要介绍grunt的使用,值得一提的是,jQuery.bootst ...
- 初始设置ubuntu 16.04 Vps部署rails
参考 https://blog.longwin.com.tw/2005/12/ssh_keygen_no_passwd/ 1 选择搬瓦工左边菜单栏中的“Root password modificati ...
- PHP中return,exit,die的区别
参考:die(),exit(),return的区别 1.die() 是遇到错误才停止,停止程序运行,输出内容(是程序级别的) 2.exit,exit():是一个函数 是停止程序运行,前者不输出内容:后 ...
- a+b+c的N次方展开
今天在给儿子看笔记本上的照片的时候,偶然发现了2009年手绘的一张a+b+c的N次方展开图,故写下面的博客以记之,为年轻时代的我点个赞! 20年前的我,一个充满激情的且富有专注力的数学发烧友! 10年 ...
- minStack实现
设计包含 min 函数的栈(栈)定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素.要求函数 min.push 以及 pop 的时间复杂度都是 O(1). #include <a ...
- java当中的定时器
对于开发游戏项目的同胞来说,Timer 这个东西肯定不会陌生,今天对以前自己经常使用的定时进行了一番小小的总结!没有写具体实现的原理,只是列举出了其中的四种比较常见的使用方法,相对而言,所以只要按照其 ...
- 图解ARP协议(四)代理ARP原理与实践(“善意的欺骗”)
一.代理ARP概述 我:当电脑要访问互联网上的服务器,目标MAC是什么? 很多小伙伴在刚学习网络协议的时候,经常这样直接回应:不就是服务器的MAC嘛! 这时我会反问:那电脑怎么拿到这个服务器的MAC地 ...
- Tomcat源码分析——server.xml文件的加载
前言 作为Java程序员,对于tomcat的server.xml想必都不陌生.本文基于Tomcat7.0的Java源码,对server.xml文件是如何加载的进行分析. 源码分析 Bootstrap的 ...