2013-02-24 61 views
1

这是一个简单的客户端 - 服务器android应用程序。服务器是在本地PC上运行的简单Java服务器,客户端在仿真器上运行。这里的客户代码:Android应用程序启动套接字不起作用

package com.example.streamer; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 

import java.io.BufferedReader; 

import java.io.BufferedWriter; 

import java.io.IOException; 

import java.io.InputStreamReader; 

import java.io.OutputStreamWriter; 

import java.net.Socket; 

class Connecting implements Runnable 
{ 
    private Socket sock; 

    private BufferedReader r; 

    private BufferedWriter out; 
    public Connecting() 
    { 
     Thread th = new Thread(this); 
     th.start(); 

    } 

    @Override 
    public void run() { 
     // TODO Auto-generated method stub 
     try 
     { 
      System.out.println("************************ trying to initiated *****************"); 
     sock = new Socket("10.0.2.2",12344); 

     System.out.println("************************ socket initiated *****************"); 

     r = new BufferedReader(new InputStreamReader(sock.getInputStream())); 

     System.out.println("************************ buffer reader initiated *****************"); 

     out = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream())); 

     System.out.println("************************ buffer writer initiated *****************"); 

     } 

     catch (IOException ioe) { } 


    } 

} 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 





    @Override 

    public void onResume() { 

     super.onResume(); 

     System.out.println("************************ on resume *****************"); 
     Connecting c = new Connecting(); 

    } 



} 

有人知道为什么指令sock = new Socket("10.0.2.2", 12344);没有执行?

回答

1

问题可能与您没有为应用程序权限设置权限有关。

您应该编辑AndroidManifest.xml文件,其中包含应用程序要求的权限等。

编辑这样的文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.android.app.myapp" > 
    <uses-permission android:name="android.permission.INTERNET" /> 
    ... 
</manifest> 

线<uses-permission android:name="android.permission.INTERNET" />将使应用程序要求的权限连接到互联网。

1

该命令尝试将套接字连接到外部主机。这可能需要很长时间。在许多Android版本中,它甚至会崩溃,因为您不应该在主线程上进行网络调用。将其移入AsyncTask或线程。

+0

我搬到了自己的类连接,使其成为一个线程中运行。我编辑了上面的代码。 – 2013-02-24 09:05:35

0

在您的清单文件中添加这两种条件

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

将现在的工作...任何其他帮助PLZ评论

相关问题