java Android和PC Socket连接
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/16305121/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Android and PC Socket connection
提问by Usman Shafi Arain
I used the following code as Client side on android device
我使用以下代码作为 android 设备上的客户端
/*
* This is a simple Android mobile client
* This application read any string message typed on the text field and
* send it to the server when the Send button is pressed
*/
package lakj.comspace.simpleclient;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class SimpleClientActivity extends Activity {
private Socket client;
private PrintWriter printwriter;
private EditText textField;
private Button button;
private String messsage;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textField = (EditText) findViewById(R.id.editText1); //reference to the text field
button = (Button) findViewById(R.id.button1); //reference to the send button
// Button press event listener
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
messsage = textField.getText().toString(); //get the text message on the text field
textField.setText(""); //Reset the text field to blank
try {
client = new Socket("10.0.2.2", 4444); //connect to server
printwriter = new PrintWriter(client.getOutputStream(),true);
printwriter.write(messsage); //write the message to output stream
printwriter.flush();
printwriter.close();
client.close(); //closing the connection
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
and following as a server side as simple java project
并作为服务器端作为简单的java项目
/*
* This is a simple server application
* This server receive a string message from the Android mobile phone
* and show it on the console.
* Author by Lak J Comspace
*/
package simpleserver;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
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) {
try {
serverSocket = new ServerSocket(4444); //Server socket
} catch (IOException e) {
System.out.println("Could not listen on port: 4444");
}
System.out.println("Server started. Listening to the port 4444");
while (true) {
try {
clientSocket = serverSocket.accept(); //accept the client connection
inputStreamReader = new InputStreamReader(clientSocket.getInputStream());
bufferedReader = new BufferedReader(inputStreamReader); //get client msg
message = bufferedReader.readLine();
System.out.println(message);
inputStreamReader.close();
clientSocket.close();
} catch (IOException ex) {
System.out.println("Problem in message reading");
}
}
}
}
i used simple button to send string from Android Emulator to java application but it's giving connection error.Which port and ip i should use instead of that mentioned in the code... and how to get that please help me
我使用简单的按钮将字符串从 Android Emulator 发送到 java 应用程序,但它给出了连接错误。我应该使用哪个端口和 ip 而不是代码中提到的那个......以及如何获得请帮助我
and how can i modify this code to send mobile contacts from android to PC??
以及如何修改此代码以将移动联系人从 android 发送到 PC?
回答by ug_
You probably have the host address wrong for your computer, If you are running a windows machine goto your start menu and in the search box type "cmd", you should see a black box popup, type in "ipconfig"
您的计算机的主机地址可能有误,如果您正在运行 Windows 机器,请转到开始菜单并在搜索框中键入“cmd”,您应该会看到一个黑框弹出窗口,键入“ipconfig”
So if i was to be buliding that app I would use the Ip address 10.0.0.129. Use any port from 9152 to 65535. You will probably want to make the IP address static so it doesnt change around on you while you test your app. Follow this tutorial to assist you http://www.howtogeek.com/howto/19249/how-to-assign-a-static-ip-address-in-xp-vista-or-windows-7/This will allow you to test on your app on local network without your computers Ip address changing.
因此,如果我要构建该应用程序,我将使用 IP 地址 10.0.0.129。使用从 9152 到 65535 的任何端口。您可能希望将 IP 地址设为静态,这样在您测试应用程序时它就不会在您身上发生变化。按照本教程为您提供帮助http://www.howtogeek.com/howto/19249/how-to-assign-a-static-ip-address-in-xp-vista-or-windows-7/这将允许您在本地网络上测试您的应用程序,而无需更改您的计算机 IP 地址。
If you want to use this app outside of your local network you will need to either rent a dedicated server, setup a java web server or use your machine as the server. To use your machine you will need a static ip address or a DNS service, I use http://dyn.com/dns/to assign a host name to my computer so that I can use my computer anytime from anywhere (as long as its turned on). Also note that if you do choose to use your computer you will need to setup port forwarding on your router. Just look up port forwarding and you will find tons of tutorials.
如果您想在本地网络之外使用此应用程序,您需要租用专用服务器、设置 Java Web 服务器或使用您的机器作为服务器。要使用您的机器,您需要一个静态 IP 地址或 DNS 服务,我使用http://dyn.com/dns/为我的计算机分配一个主机名,以便我可以随时随地使用我的计算机(只要它已打开)。另请注意,如果您选择使用计算机,则需要在路由器上设置端口转发。只需查找端口转发,您就会发现大量教程。
Good Luck.
祝你好运。
回答by Andy
Connect your device with same network then it should work.
Easy way is: Enable your device's hotspot and connect your PC on this(hotspot) network.
Don't forget to change the IP.
将您的设备连接到相同的网络,然后它应该可以工作。
简单的方法是:启用您设备的热点并在此(热点)网络上连接您的 PC。
不要忘记更改IP。