你的第一个问题:LBS一般有两种方式,第一种是通过GPS卫星导航系统。现在的智能手机(Android,苹果,黑梅等等)都自带有GPS卫星接收器,能够时时获取位置信息。不过GPS要在室外使用,而且容易受天气的影响,不过精度还算高。 第二种是通过移动通信基站来进行定位的,也就是通过离你的手机最近的基站来确定你的位置(HTTP通信),这种定位方式比较稳定,但是精度太低,一般的误差高达1000米。
第二个问题:手机里面有GPS接收器,你们去找一个android软件工程师,叫他帮你们做一个这样的软件,很简单的
第三个问题:程序员当然可以完成功能啦 。
你的附加问题:GPS定位的误差一般很小。 如果一个人拿着手机在路上走,假设他用的是GPS定位,那么GPS接收器每隔一段时间(如果要时时定位,那么间隔就非常小,零点几秒就要获取一次)就要刷新一次经纬度,这样这个人的位置就会时时在手机上反映。 如果他用的是基站定位,那么就是利用HTTP通信,必须与服务器进行稳定的连接,时时向服务器发送请求,接收服务器的反馈信息,这样位置就会在屏幕上刷新。
(注:本人乃LBS位置服务开发工程师)
因为你使用了BufferedReader的readLine方法,这个方法要读取到换行符才会停止阻塞。所以要在所有write的字符串末尾加上换行符("\r\n")最后帮你改得:
服务器端:
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.IOException
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.net.ServerSocket
import java.net.Socket
import java.util.ArrayList
import java.util.List
public class Server extends Thread{
Socket s = null
public static List<Chat>chats = new ArrayList<Chat>()
public static void main(String[] args) {
new Server().start()
}
public void run() {
try {
// 指定端口开始监听
ServerSocket ss = new ServerSocket(3456)
// 阻塞并接受客户端连接请求
while (true) {
s = ss.accept()
Chat chat = new Chat(s)
// 每接收一个客户端就起一个单独的聊天线程
new Thread(chat).start()
chats.add(chat)
System.out.println("Join a client thread!")
System.out.println("Current client thread amount: " + chats.size())
}
} catch (IOException e) {
e.printStackTrace()
}
}
}
// 聊天线程
class Chat implements Runnable {
BufferedReader br = null
BufferedWriter bw = null
Socket s = null
public Chat(Socket s) {
this.s = s
try {
br = new BufferedReader(new InputStreamReader(s.getInputStream()))
bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()))
} catch (Exception e) {
e.printStackTrace()
}
}
// 将客户端发来的消息打印并重发回去
@Override
public void run() {
try {
String str = null
bw.write("hello")
bw.write("\r\n")
bw.flush()
while (true) {
if ((str = br.readLine()) != null) {
System.out.println("Client say: " + str)
bw.write(str)
bw.write("\r\n")
bw.flush()
}
}
} catch (IOException e) {
e.printStackTrace()
} finally {
try {
br.close()
bw.close()
} catch (IOException e) {
e.printStackTrace()
}
}
}
}
==============================
客户端:
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.IOException
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.net.Socket
import java.net.UnknownHostException
import java.util.Scanner
public class Client implements Runnable {
Socket s = null
BufferedWriter write = null
BufferedReader read = null
Scanner input = new Scanner(System.in)
public static void main(String[] args) {
Client client = new Client()
client.start()
}
public void start() {
String str = null
try {
s = new Socket("127.0.0.1", 3456)
read = new BufferedReader(new InputStreamReader(s.getInputStream()))
write = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()))
new Thread(this).start()
//负责发送消息给服务端
while (true) {
str = input.next()
if (str.equalsIgnoreCase("bye")) {
break
}
write.write(str)
write.write("\r\n")
write.flush()
}
} catch (UnknownHostException e) {
e.printStackTrace()
} catch (IOException e) {
e.printStackTrace()
} finally {
try {
write.close()
read.close()
s.close()
} catch (IOException e) {
e.printStackTrace()
}
}
}
//负责接收服务端的消息
@Override
public void run() {
String str = null
try {
while (true) {
str = read.readLine()
System.out.println("Client say:" + str)
}
} catch (IOException e) {
e.printStackTrace()
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)