我试图开发一个Android应用程序,我陷入了这个问题。从一个Android设备获取字符串并发送到其他设备
我想从一个Android设备发送两个字符串值(经度,纬度)到具有相同应用的其他Android设备。从在线研究,我的理解是,Android设备将两个字符串发送到服务器,然后我可以使用谷歌gcm将这些字符串发送到其他设备(我认为)。也许服务器可以运行java,我可以编写一些程序来处理稍后收到的数据。
我已经成功地从android设备获取位置数据,,但被卡在发送这个位置从android手机到我的电脑上的服务器。我的教授告诉我,我可以让我的电脑成为一台服务器。在连接android和我的mac之前,我试着连接两台电脑。我成功地使用Socket &连接我的imac和macbook,在http://www.tutorialspoint.com/java/java_networking.htm的底部找到SocketServer示例。这花了很长时间,因为我不知道我必须移除防火墙。
因此,我发现了另一个示例,将Android连接到使用Socket的电脑http://lakjeewa.blogspot.ca/2012/03/simple-client-server-application-for.html并尝试使用它。尽管可以连接两台电脑,但android不会连接到我的电脑。我认为这个问题是在代码
client = new Socket(serverName, port);
我想对于servername很多东西,如计算机的IP地址以192.168开始,“本地主机”,10.0.2.2,HTTP:/ myIpAdressFoundByGoogling,“myComputerName.local”但没有工作。这里有什么问题? Android设备没有SIM卡,并且连接到与计算机相同的WiFi。我应该有XAAMPP? (我刚刚发现这个昨晚)并首先学习php?我完全失去了如何处理服务器。
我结束了这里,因为我想我可以测试和开发应用程序使用计算机作为服务器,当我完成开发时,我可以得到一个服务器(如亚马逊网络服务,我不知道),并取代代码中的服务器位置,并复制并粘贴服务器Java代码。 我可以这样做吗?也许谷歌应用引擎是一个可行的解决我的问题?
的客户端代码......
public class MainActivity extends Activity {
private Socket client;
private PrintWriter printwriter;
private EditText textField;
private Button button;
private String message;
private int port = 5555;
private String serverName = "192.168.?????"; I think this is where the problem is
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textField = (EditText) findViewById(R.id.editText1);
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
message = textField.getText().toString();
textField.setText("");
try {
// connect with server
client = new Socket(serverName, port);
printwriter = new PrintWriter(client.getOutputStream(),
true);
printwriter.write(message);
printwriter.flush();
printwriter.close();
client.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
服务器代码...
public class main {
private static ServerSocket serverSocket;
private static Socket clientSocket;
private static InputStreamReader inputStreamReader;
private static BufferedReader bufferedReader;
private static String message;
public static void main(String[] args) {
int port = 5555;
try {
serverSocket = new ServerSocket(port);
} catch (IOException e) {
System.out.println("could not listen on port: " + port);
e.printStackTrace();
}
System.out.println("server started listening to the port " + port);
while (true) {
try {
// accept the client connection
clientSocket =serverSocket.accept();
System.out.println("someone connected to the server");
inputStreamReader = new InputStreamReader(clientSocket.getInputStream());
//get the client meesage
bufferedReader = new BufferedReader(inputStreamReader);
message = bufferedReader.readLine();
System.out.println(message);
inputStreamReader.close();
clientSocket.close();
} catch (IOException e) {
System.out.println("problem in reading the message");
e.printStackTrace();
}
}
}
我上传了代码。你可以看一下吗? – WarmInToronto
你是否收到异常/崩溃?还是代码执行得很好,只是消息没有被发送? – Bob
我刚刚收到“不幸的是,您的应用程序已停止。” FATAL EXCEPTION,android.os.NetworkOnMainThreadException和LogCat中的其他红线。 – WarmInToronto