【问题标题】:DEBUG/SntpClient(60): request time failed: java.net.SocketException: Address family not supported by protocolDEBUG/SntpClient(60): request time failed: java.net.SocketException: Address family not supported by protocol
【发布时间】:2011-05-08 23:33:40
【问题描述】:

我在用 C 语言编写的 Linux 控制台上运行服务器,并在 android 中创建客户端。我在 DDMS 上没有收到任何错误,但出现了 Debug 消息

11-12 20:38:06.787: DEBUG/SntpClient(60): request time failed: 
java.net.SocketException: Address family not supported by protocol

但消息不会发送到服务器。但是如果在 C 或 java 中创建客户端它工作正常。 任何建议。

public class UDPDemo extends Activity {
    private EditText mEditText;
    private Button sendButton;
    private DatagramSocket client_socket;
    private static InetAddress IPAddress;
    private byte[] send_data = new byte[1024];
    static{
    try {
     IPAddress =  InetAddress.getByName("127.0.0.1");
 } catch (UnknownHostException e1) {
 e1.printStackTrace();
 }
} 

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mEditText = (EditText)findViewById(R.id.EditText01);
    sendButton = (Button)findViewById(R.id.Button01);
    sendButton.setOnTouchListener( send);
 }
OnTouchListener send = new OnTouchListener() {
  @Override
  public boolean onTouch(View v, MotionEvent event) {
  if( event.getAction() == MotionEvent.ACTION_UP)
  try {  
      client_socket = new DatagramSocket();
      String data =  mEditText.getText().toString();
      send_data = data.getBytes();

      DatagramPacket send_packet = new DatagramPacket(send_data,
               send_data.length, IPAddress, 5000); 

client_socket.send(send_packet);
mEditText.setText("");
  }catch (IOException e) {
    System.out.println("UDPDemo.enclosing_method() error"+e.getMessage());
   e.printStackTrace();
  }
 return true;
 }
};
}

【问题讨论】:

  • 我们看到的是相同的,但一直都是。它是随机发生的,当它发生时,我们需要打开一个到服务器的新 HTTP 连接。问题是否会在最新的 Android 版本 2.2 或 2.3 之一中引入。我们在真实设备上没有看到任何问题。您使用的是哪个版本?你在真机上测试过吗?
  • 我使用的是安卓 2.1。我对真实设备没有任何问题。它对我来说很好,因为我正在使用 android 用于编译 C 应用程序的 arm 编译器编译服务器(在 C 中)。(如果您查看 ndk 文档)。

标签: android


【解决方案1】:

记得添加

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

进入清单。

这对我有帮助。

【讨论】:

    【解决方案2】:

    SNTP 是网络时间协议。模拟器尝试获取实际时间。我认为,这与您的应用无关。

    发件人:http://developer.appcelerator.com/question/117495/javanetsocketexception-address-family-not-supported-by-protocol

    【讨论】:

      【解决方案3】:

      我知道这是旧的,但我相信这是你的问题:

      IPAddress =  InetAddress.getByName("127.0.0.1");
      

      Android 使用 127.0.0.1 作为自己的环回设备。要获得“localhost”,也就是你的服务器,你需要 10.0.2.2。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-04
        • 2019-02-07
        • 2021-04-02
        • 1970-01-01
        • 2019-11-06
        • 2013-05-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多