想做一个关于socket编程的测试,android作为客户端,java程序作为服务器,服务器执行的时候在:BufferedReader br = new BufferedReader(new inputStreamReader(socket.getInputString())); String line = br.readline();这一句时老是执行不通过,请问各位是什么原因?

解决方案 »

  1.   

    看代码估计,网络不通,上log
      

  2.   

    客户端代码:
    public class VisitTerminalActivity extends Activity implements OnClickListener{
        /** Called when the activity is first created. */
    private ImageButton visitCallButton;
    private Button ViewMenuButton;
    //call center terminal socket connect
    private Socket callSocket;
    private ServerSocket callServerSocket;
    private static final int PORT = 8181;
    private static final String ip="192.168.1.102";
    private BufferedReader callBR;
    private PrintWriter callPW;
    private StringBuffer callSB;
        @Override
        public void onCreate(Bundle savedInstanceState) {
         requestWindowFeature(Window.FEATURE_NO_TITLE);
         //getWindow().setBackgroundDrawableResource(R.drawable.unlock_delayed_time);
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            visitCallButton = (ImageButton)findViewById(R.id.visit_call_button);
            visitCallButton.setOnClickListener(this);
            ViewMenuButton = (Button)findViewById(R.id.view_menu_btn);
            ViewMenuButton.setOnClickListener(this);
        }
       
        @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
         switch(v.getId()){
         case R.id.visit_call_button:
         new Thread(new CallCenterTerminalThread()).start();
         gotoCallCenter();
    break;
         case R.id.view_menu_btn:
         gotoMainMenu();
         break;
         }

    }
        private void gotoCallCenter(){
         Intent skipIntent = new Intent();
         skipIntent.setClass(this, CallWithCenterTerminal.class);
         startActivity(skipIntent);
        }
    private void gotoMainMenu(){
    Intent intentMain = new Intent();
    intentMain.setClass(this, VisitTerminalMainMenu.class);
    startActivity(intentMain);
    }

        class CallCenterTerminalThread implements Runnable{
        
        
         @Override
         public void run() {
         // TODO Auto-generated method stub
         //建立连接
         try {
             callSocket = new Socket(ip,PORT);
             callServerSocket = new ServerSocket(PORT);
             callBR = new BufferedReader(new InputStreamReader(callSocket.getInputStream()));
             callPW = new PrintWriter(callSocket.getOutputStream());
             System.out.println("c"+callSocket.isConnected());
         } catch (Exception e) {
         // TODO: handle exception
         e.printStackTrace();
         }
         //发送消息
         if(callSocket.isConnected()){
         callPW.print("call");
         System.out.println("connect");
         }
         callSB = new StringBuffer();
         String readLine = null;
         try {
         while((readLine=callBR.readLine())!=null){
             callSB.append(readLine);
             }
    } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
    }finally{
         try {
         callSocket.close();
         callServerSocket.close();
         callPW.close();
         callBR.close();
         } catch (Exception e2) {
         // TODO: handle exception
         }
         }
        
         }
        }
        private void initSocket(){
         try {
         callSocket = new Socket(ip,PORT);
         callServerSocket = new ServerSocket(PORT);
         callBR = new BufferedReader(new InputStreamReader(callSocket.getInputStream()));
         callPW = new PrintWriter(callSocket.getOutputStream());
         System.out.println("c"+callSocket.isConnected());
    } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
    }
        
        
        }

    }服务器代码:
    package com.serversocket.receiver;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;public class ServerSocketTest {
    private static ServerSocket sSocket;
    private static Socket clientSocket;
    private static BufferedReader serverBR;
    private static PrintWriter serverPW;
    private static StringBuffer sb;
    public static void main(String[] args) {
    try {
    sSocket = new ServerSocket(8181);
    System.out.println("serverSocket is:"+sSocket.getLocalPort());

    clientSocket = sSocket.accept();
    if(clientSocket.isConnected()){
    System.out.println("server connect");
    }
    serverBR = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    serverPW = new PrintWriter(clientSocket.getOutputStream());
    new ReceiverThread().start();
    } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
    }

    }
    static class ReceiverThread extends Thread{
    @Override
    public void run() {
    // TODO Auto-generated method stub
    System.out.println("run");
    String line = null;
    sb = new StringBuffer();
    try {
    System.out.println("read:"+serverBR.readLine());
    } catch (Exception e) {
    // TODO: handle exception
    }

    try {
    while((line= serverBR.readLine())!=null){
    sb.append(line);
    }
    String content = sb.toString();
    System.out.println("content:"+content);
    System.out.println(content);
    serverPW.println("server");
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }finally{
    try {
    sSocket.close();
    clientSocket.close();
    serverPW.close();
    serverBR.close();
    } catch (Exception e2) {
    // TODO: handle exception
    e2.printStackTrace();
    }


    }
    if(isStringBuffer("call")){
    System.out.println("receiver");
    }
    super.run();
    }
    }
    private static  boolean isStringBuffer(String content){
    if(sb.toString().equals(content)){
    return true;
    }
    return false;
    }
    }
    客户端有出错信息:01-02 00:57:33.199: WARN/System.err(2551): java.net.SocketException: Connection reset by peer
    01-02 00:57:33.199: WARN/System.err(2551):     at org.apache.harmony.luni.platform.OSNetworkSystem.read(Native Method)
    01-02 00:57:33.199: WARN/System.err(2551):     at dalvik.system.BlockGuard$WrappedNetworkSystem.read(BlockGuard.java:273)
    01-02 00:57:33.199: WARN/System.err(2551):     at org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:458)
    01-02 00:57:33.199: WARN/System.err(2551):     at org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:85)
    01-02 00:57:33.199: WARN/System.err(2551):     at java.io.InputStreamReader.read(InputStreamReader.java:255)
    01-02 00:57:33.199: WARN/System.err(2551):     at java.io.BufferedReader.fillBuf(BufferedReader.java:128)
    01-02 00:57:33.209: WARN/System.err(2551):     at java.io.BufferedReader.readLine(BufferedReader.java:357)
    01-02 00:57:33.209: WARN/System.err(2551):     at com.matchsystem.visit.main.VisitTerminalActivity$CallCenterTerminalThread.run(VisitTerminalActivity.java:92)
    01-02 00:57:33.209: WARN/System.err(2551):     at java.lang.Thread.run(Thread.java:1019)服务器输出信息是:serverSocket is:8181
    server connect
    run
    按理说server connect 这一句打印信息已经输出,应该是连接已经建立起来了,为什么我在服务器收不到信息?
      

  3.   

    客户端有出错信息:01-02 00:57:33.199: WARN/System.err(2551): java.net.SocketException: Connection reset by peer
    01-02 00:57:33.199: WARN/System.err(2551):     at org.apache.harmony.luni.platform.OSNetworkSystem.read(Native Method)
    01-02 00:57:33.199: WARN/System.err(2551):     at dalvik.system.BlockGuard$WrappedNetworkSystem.read(BlockGuard.java:273)
    01-02 00:57:33.199: WARN/System.err(2551):     at org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:458)
    01-02 00:57:33.199: WARN/System.err(2551):     at org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:85)
    01-02 00:57:33.199: WARN/System.err(2551):     at java.io.InputStreamReader.read(InputStreamReader.java:255)
    01-02 00:57:33.199: WARN/System.err(2551):     at java.io.BufferedReader.fillBuf(BufferedReader.java:128)
    01-02 00:57:33.209: WARN/System.err(2551):     at java.io.BufferedReader.readLine(BufferedReader.java:357)
    01-02 00:57:33.209: WARN/System.err(2551):     at com.matchsystem.visit.main.VisitTerminalActivity$CallCenterTerminalThread.run(VisitTerminalActivity.java:92)
    01-02 00:57:33.209: WARN/System.err(2551):     at java.lang.Thread.run(Thread.java:1019)不知道是什么原因造成的?