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添加:



界面如下:

Android实时获得经纬度,发送给c++服务端_第1张图片

 

c++服务端:

复制代码
#include #include #include #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++服务端_第2张图片

转载于:https://www.cnblogs.com/tiandsp/p/7440502.html

更多相关文章

  1. Android在WebView中注入Js代码
  2. Android获取经纬度的值并且显示
  3. 工具:Android本地代码生成器
  4. Android很有用的代码片段
  5. android上传图片到服务器,求服务器那边和android的Activity的完整
  6. Android根据经纬度获取位置信息
  7. android客户端从服务器端下载文件,服务端返回文件流(文件不在项目

随机推荐

  1. Android(安卓)图片加载工具类 Universal-
  2. android download file and save to sdCa
  3. Android 创建socket客户端
  4. Android 禁止ViewPager滑动
  5. 如何区别Android手机卡三大运营商
  6. android需要的访问权限(不断更新,希望大家
  7. Android HelloWorld程序
  8. API 25 (Android 7.1.1 API) animation.A
  9. Android 分别使用Post与Get实现网络图片
  10. android国外网站