将套接字连接到设备上的本地地址

5

我已经困扰于这个问题一段时间了。我正在通过套接字从设备发送数据到另一个设备,当接收方收到数据时,我必须将这些数据从套接字发送到设备本身。localhost/127.0.0.1/10.0.0.2或WiFi地址都无法使用。

我该如何将数据从套接字发送到设备上的localhost:port

try
{
    Socket socket = new Socket(InetAddress.getLocalHost(), 1500);
    InputStream is = s.getInputStream();
    OutputStream os = socket.getOutputStream();
    int bufferSize = 1024;
    byte[] buffer = new byte[bufferSize];
    int len = 0;
    while ((len = is.read(buffer)) > 0)
    {
        if(is.available() > 1024){
            os.write(buffer);
        Log.i(TAG, "localSocket writing: " + buffer.length);
        }


        try
        {
            Thread.sleep(100);
        }
        catch (InterruptedException e)
        {
            Log.e(TAG, "LocalSocketThread" + e.toString());
        }
    }
}

我的清单权限:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

数据到达端口44444,现在我想通过套接字将数据转发到本地主机。我已经尝试使用DatagramSocket和Sockets连接到“10.0.2.2”,“127.0.0.1”,“localhost”和自己的WiFi地址。我知道它们是设备的回送地址,但是我该如何连接到它们? - alex_muc
1
请发布您的AndroidManifest.xml完整的方法代码。尝试一行并不构成尝试。 - Phil
你的清单文件呢?你请求了哪些权限? - Phil
+1。这是一个写得很好的问题! - Phil
定义“不起作用”是什么意思?这不是一个真正的问题。 - user207421
2个回答

0

尝试将 null 发送到地址字段:

Socket socket = new Socket(null, 1500);

-1
根据你的代码,它写得没有意义,你从套接字中读取并立即测试是否可用。你刚刚从中读取,所以很可能会返回0。
while ((len = is.read(buffer)) > 0)
{
   // this is what makes no sense
   if (is.available() > 1024) os.write(buffer);
   // what you probably want to do is
   //  Even this test is not necessary because you already test in the while loop
   if (len > 0) 
   {
      os.write(buffer, 0, len);
      Log.i(TAG, "localSocket writing: " + len);
   }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接