2012-03-13 63 views
1

這是我的服務器程序。這工作正常。它開始等待客戶。Android應用程序開發中的套接字編程

package jay.com; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 
public class serv { 
public static void main(String[] args) throws IOException{ 
    String recvsentence = null; 
    String sendsentence = null; 


    ServerSocket server=new ServerSocket(5000); 

    System.out.println("waiting for client"); 

    Socket sock = server.accept(); 
    System.out.println("Client Connected with IP Address"); 

    DataInputStream dis = new DataInputStream(sock.getInputStream()); 

    DataOutputStream dos = new DataOutputStream(sock.getOutputStream()); 

    recvsentence = dis.readUTF(); 

    System.out.println("Got Data"); 

    sendsentence = recvsentence+"changed"; 

    System.out.println("Message Altered"); 

    dos.writeUTF(sendsentence); 

    sock.close(); 

    server.close(); 

} 

}

這是我的客戶端程序。套接字是不是在這裏創造....

package jay.com; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.net.InetAddress; 
import java.net.Socket; 
import java.net.SocketAddress; 
import java.net.UnknownHostException; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class Mypro1 extends Activity { 
EditText myText,finaltext; 
Button button; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    myText=(EditText)findViewById(R.id.editText1); 
    button=(Button)findViewById(R.id.button1); 
    finaltext=(EditText)findViewById(R.id.editText2); 


    button.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View arg0) { 
      byte adr[] = new byte[4]; 
      adr[0]=(byte)(192); 
      adr[1]=(byte)(168); 
      adr[2]=(byte)(1); 
      adr[3]=(byte)(141); 
      String sendsentence=null; 
      String recvsentence=null; 
      InetAddress addr=null;  

      try { 
       addr = InetAddress.getByName("10.0.2.2"); 
       //finaltext.setText(addr.toString()); 
      } catch (UnknownHostException e1) { 
       e1.printStackTrace(); 
      } 

      try { 
       //finaltext.setText("hi"); 
       Socket con=new Socket(addr,5000); 

       finaltext.setText("Socket Created"); 

       DataInputStream dis = new DataInputStream(con.getInputStream()); 
       DataOutputStream dos = new DataOutputStream(con.getOutputStream()); 

       sendsentence=myText.getText().toString(); 

       dos.writeUTF(sendsentence); 

       System.out.println("waiting for server response"); 

       recvsentence = dis.readUTF(); 

       System.out.println("got response"); 

       finaltext.setText(recvsentence); 

      } catch (UnknownHostException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       System.out.println("Problem while creating"); 
       e.printStackTrace(); 
      } 

     } 
    }); 
} 

}

誰能告訴我什麼問題,我也想知道如何運行該程序。我應該給什麼ip地址。我是否已經嘗試連接到10.0.2.2或192.168.1.141(我的IP地址)....

通過調用 server.getInetAddress();

因此,如果您

+0

你需要使用主機的IP地址 – Ruuhkis 2012-03-13 06:49:33

+0

爲什麼套接字不在客戶端創建,即使在更改主機的IP地址後? – Jayanth 2012-03-13 06:51:42

回答

1

你可以找出服務器的IP地址在創建ServerSocket後更改該行,您將看到服務器的當前IP地址。

System.out.println("waiting for client on IP " + server.getInetAddress()); 
0

如果您運行仿真器的服務器客戶端應用程序,你必須,否則你的重定向端口將仿真器不作爲服務器工作 - 不是在UI線程創建 Go through it...

0

套接字。它們應該在單獨的線程上創建,否則將被操作系統阻止。最佳方法是使用AysncTask,但對於初學者,

new thread(new new Runnable() { 
    public void run() { 
     // create your socket here. 
    } 
}).start(); 

此方法可以工作。