我正在尝试使用pc作为服务器和Android模拟器作为客户端。我想从服务器向客户端发送消息。这是代码: 服务器:
import java.net.*;
import java.io.*;
public class SimpleServer {
public static void main(String[] args)
throws IOException
{
ServerSocket ss = new ServerSocket(30000);
while(true) {
Socket s = ss.accept();
OutputStream os = s.getOutputStream();
os.write("Hello World!\n".getBytes("utf-8"));
os.close();
s.close();
}
}
}
客户端:
public class MainActivity extends AppCompatActivity {
EditText text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (EditText)findViewById(R.id.messg);
new Thread() {
@Override
public void run() {
try {
// What ip address should be chosen here?
Socket socket = new Socket("xxx.xxx.xxx.xxx",30000);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = br.readLine();
text.setText(line);
br.close();
socket.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
}
我使用localhost:127.0.0.1在同一台计算机上测试了服务器和客户端的代码并且它可以工作。但是,我无法弄清楚客户端是否是genymotion在同一台计算机上启动的模拟器,客户端套接字连接的正确IP地址是什么?
我正在使用wifi,我尝试了wlan0的IP地址(由ifconfig找到),127.0.0.1,以及我的计算机的公共IP地址(由Google找到),但是客户端模拟器没有显示来自服务器的消息。
答案 0 :(得分:1)
如果您想参考运行Android模拟器的计算机,请改用IP地址 10.0.2.2 。您可以阅读更多相关信息here
答案 1 :(得分:0)
您是否尝试过计算机的局域网IP地址?在你的ifconfig中你必须得到一些东西
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
...
inet 192.168.43.238
所以使用192.168.43.238