java吧 关注:1,221,749贴子:12,674,945
  • 11回复贴,共1

java初学者请教各位大神,这个程序报错是怎么回事?应该怎么修改

只看楼主收藏回复

一楼先放logcat
11-12 19:15:15.790: D/AndroidRuntime(842): Shutting down VM
11-12 19:15:15.790: W/dalvikvm(842): threadid=1: thread exiting with uncaught exception (group=0xb4ae6ba8)
11-12 19:15:15.810: E/AndroidRuntime(842): FATAL EXCEPTION: main
11-12 19:15:15.810: E/AndroidRuntime(842): Process: com.example.cilent, PID: 842
11-12 19:15:15.810: E/AndroidRuntime(842): android.os.NetworkOnMainThreadException
11-12 19:15:15.810: E/AndroidRuntime(842): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
11-12 19:15:15.810: E/AndroidRuntime(842): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
11-12 19:15:15.810: E/AndroidRuntime(842): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
11-12 19:15:15.810: E/AndroidRuntime(842): at libcore.io.IoBridge.connect(IoBridge.java:112)
11-12 19:15:15.810: E/AndroidRuntime(842): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
11-12 19:15:15.810: E/AndroidRuntime(842): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
11-12 19:15:15.810: E/AndroidRuntime(842): at java.net.Socket.startupSocket(Socket.java:567)
11-12 19:15:15.810: E/AndroidRuntime(842): at java.net.Socket.tryAllAddresses(Socket.java:128)
11-12 19:15:15.810: E/AndroidRuntime(842): at java.net.Socket.<init>(Socket.java:178)
11-12 19:15:15.810: E/AndroidRuntime(842): at java.net.Socket.<init>(Socket.java:150)
11-12 19:15:15.810: E/AndroidRuntime(842): at com.example.cilent.MainActivity.connectToServer(MainActivity.java:67)
11-12 19:15:15.810: E/AndroidRuntime(842): at com.example.cilent.MainActivity$1.onClick(MainActivity.java:51)
11-12 19:15:15.810: E/AndroidRuntime(842): at android.view.View.performClick(View.java:4438)
11-12 19:15:15.810: E/AndroidRuntime(842): at android.view.View$PerformClick.run(View.java:18422)
11-12 19:15:15.810: E/AndroidRuntime(842): at android.os.Handler.handleCallback(Handler.java:733)
11-12 19:15:15.810: E/AndroidRuntime(842): at android.os.Handler.dispatchMessage(Handler.java:95)
11-12 19:15:15.810: E/AndroidRuntime(842): at android.os.Looper.loop(Looper.java:136)
11-12 19:15:15.810: E/AndroidRuntime(842): at android.app.ActivityThread.main(ActivityThread.java:5017)
11-12 19:15:15.810: E/AndroidRuntime(842): at java.lang.reflect.Method.invokeNative(Native Method)
11-12 19:15:15.810: E/AndroidRuntime(842): at java.lang.reflect.Method.invoke(Method.java:515)
11-12 19:15:15.810: E/AndroidRuntime(842): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
11-12 19:15:15.810: E/AndroidRuntime(842): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
11-12 19:15:15.810: E/AndroidRuntime(842): at dalvik.system.NativeStart.main(Native Method)


IP属地:广东1楼2014-11-13 08:23回复
    下面是服务端代码
    package server;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    public class SocketServer extends Thread{
    public void run(){
    Socket client;
    String msg="";
    try {
    while(true){
    client=responseSocket();
    while(true){
    msg=receiveMsg(client);
    System.out.println("收到客户端消息:"+msg);
    sendMsg(client,msg);
    if(true){
    break;
    }
    }
    closeSocket(client);
    }
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    public static final int PORT=1234;
    ServerSocket ss;
    BufferedWriter bw;
    BufferedReader br;
    public void createSocket() throws IOException{
    ss=new ServerSocket(PORT);
    System.out.println("服务器已经开启······");
    }
    public Socket responseSocket() throws IOException{
    Socket client=ss.accept();
    System.out.println("客户端已经连接······");
    return client;
    }
    public void closeSocket(Socket s) throws IOException{
    br.close();
    bw.close();
    s.close();
    System.out.println("客户端已经关闭······");
    }
    public void sendMsg(Socket s,String msg) throws IOException{
    bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
    bw.write(msg+"\n");
    bw.flush();
    }
    public String receiveMsg(Socket s) throws IOException{
    br=new BufferedReader(new InputStreamReader(s.getInputStream()));
    String msg=br.readLine();
    System.out.println("服务器收到客户端消息:"+msg);
    return msg;
    }
    public SocketServer() throws IOException{
    createSocket();
    }
    public static void main(String args[]) throws IOException{
    SocketServer ss=new SocketServer();
    if(ss!=null){
    ss.start();
    }
    }
    }


    IP属地:广东2楼2014-11-13 08:24
    回复
      下面是客户端代码
      package com.example.cilent;
      import java.io.BufferedReader;
      import java.io.BufferedWriter;
      import java.io.IOException;
      import java.io.InputStreamReader;
      import java.io.OutputStreamWriter;
      import java.net.Socket;
      import java.net.UnknownHostException;
      import android.app.Activity;
      import android.os.Bundle;
      //import android.os.StrictMode;
      import android.view.View;
      import android.view.View.OnClickListener;
      import android.widget.Button;
      import android.widget.EditText;
      import android.widget.TextView;
      public class MainActivity extends Activity {
      TextView tv;
      EditText et;
      Button btn;
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      //使用StrictMode强制使用
      // if (android.os.Build.VERSION.SDK_INT > 9) {
      //StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
      //StrictMode.setThreadPolicy(policy);
      //}
      init();
      }
      public void init(){
      et=(EditText)findViewById(R.id.EditText);
      btn=(Button)findViewById(R.id.Button);
      tv=(TextView)findViewById(R.id.textView1);
      btn.setOnClickListener(new OnClickListener(){
      @Override
      public void onClick(View v) {
      // TODO Auto-generated method stub
      String s=et.getText().toString();
      try {
      //System.out.println("2222222222222222");
      connectToServer(s);
      // System.out.println("1111111111111111");
      } catch (UnknownHostException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      // System.out.println(e);
      } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }
      }
      });
      }
      public void connectToServer(String s) throws UnknownHostException, IOException{
      Socket client=new Socket("192.168.1.2",1234);
      sendMsg(client,s);
      String str=receiveMsg(client);
      tv.setText(str);
      System.out.println(str);
      }
      public Socket requestSocket(String host,int port) throws UnknownHostException, IOException{
      Socket s=new Socket(host,port);
      return s;
      }
      public void sendMsg(Socket socket,String msg) throws IOException{
      BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
      writer.write((msg.replaceAll("\n", "")+"\n"));
      writer.flush();
      }
      public String receiveMsg(Socket socket) throws IOException{
      BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
      String msg=reader.readLine();
      return msg;
      }
      }


      IP属地:广东3楼2014-11-13 08:24
      回复
        求各路大神指教


        IP属地:广东4楼2014-11-13 08:27
        回复
          人工置顶


          IP属地:广东5楼2014-11-13 09:14
          回复
            有兴趣可以一起来讨论交流。


            来自Android客户端6楼2014-11-13 09:23
            回复
              在线等…


              IP属地:广东来自Android客户端7楼2014-11-13 09:38
              回复
                不让贴链接……复制吧
                thread exiting with uncaught exceptionandroid Menifest.xml中没有声明activity
                android.os.NetworkOnMainThreadExceptionandroid 4.0以后,要通过线程来访问网络


                IP属地:福建9楼2014-11-13 09:57
                收起回复
                  没看你的代码,我就感觉你是在主线程中进行网络请求,android 4.0以上是不允许的


                  IP属地:上海10楼2014-11-13 10:50
                  收起回复