2012-03-13 36 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(); 

此方法可以工作。