我一直在尝试几天,现在创建一个应用程序客户端服务器,在Android上,在同一台机器上运行.... 我已经使用各种显示功能来显示状态的客户端和服务器...挣扎后,我已经成功地连接他们两个,这并不是很难做到。Android的客户端服务器
我面临的最大问题是何时将数据从客户端发送到服务器。
我已经使用了DisplayTitle()
功能,在服务器端显示,达到有来自未来的数据的客户机,但它从来没有显示什么
我觉得现在的问题是在发送数据,因为我使用PrintWriter发送数据,我已经读过,我应该刷新它,以便这样做 - 否则数据将发送只有当我的缓冲区已满....我已经完成了,仍然没有!
这是我的客户端代码:
public class screen1 extends Activity {
private TextView clientState;
private String serverIpAddress="10.0.2.2";
public static final int ClientPort = 8080;
String message="Hello Server!";
int longitude;
int latitude;
Cursor c;
DBAdapter db;
private Handler handler=new Handler();
Socket socket;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.screen1);
clientState = (TextView) findViewById(R.id.client_Status);
Button b = (Button)findViewById(R.id.mainMenu);
b.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
Intent i = new Intent(screen1.this, screen2.class);
startActivity(i);
}
});
Thread cThread=new Thread(new ClientThread());
cThread.start();
db=new DBAdapter(this);
db.createDatabase();
db.openDataBase();
}
public class ClientThread implements Runnable{
private PrintWriter out=null;
public void run()
{
try
{
InetAddress serverAddr=InetAddress.getByName(serverIpAddress);
handler.post(new Runnable(){
public void run(){
clientState.setText(" try to connect!");
}
});
socket=new Socket(serverAddr,ClientPort);
PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
}
catch(UnknownHostException e){
System.err.println("Don't know about host");
}
catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to host");
}
if(socket!=null && out!=null){
try{
c=db.getAllData();
if(c.moveToFirst())
{
do{
longitude=Integer.parseInt(c.getString(1));
out.println(longitude);
out.flush();
latitude=Integer.parseInt(c.getString(2));
out.println(latitude);
out.flush();
}while(c.moveToNext());
}
out.close();
socket.close();
}
catch (IOException e) {
System.err.println("IOException: " + e);
}
}
}
}
}
这里是我的服务器在DisplayTitle()
,我尝试显示纬度和经度,我应该从客户端接收:
public class Server1 extends Activity {
//the ip the server is listening to
public static String SERVERIP="10.0.2.15";
Socket client;
Scanner s=null;
TextView serverStatus;
Handler handler=new Handler();
protected int ServerPort= 6000;
int longitude;
int latitude;
protected boolean isStopped = false;
private ServerSocket serverSocket=null;
private Socket clientSocket=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.server1);
Button b = (Button)findViewById(R.id.mainMenu);
serverStatus =(TextView)findViewById(R.id.server_Status);
b.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0){Intent i = new Intent(Server1.this, Server2.class);
startActivity(i);}});
Thread fst=new Thread(new ServerThread());
fst.start();
// MultiThreadedServer server = new MultiThreadedServer(6000);
// new Thread(server).start();
}
public class ServerThread implements Runnable{
public void run(){
try{
InetSocketAddress serverAddr =new InetSocketAddress(SERVERIP,6000);
serverSocket = new ServerSocket();
serverSocket.bind(serverAddr);
handler.post(new Runnable(){public void run() {
serverStatus.setText("wait for clients");
}});
while(true){
//accept for incoming clients
client= serverSocket.accept();
handler.post(new Runnable(){public void run() {
serverStatus.setText("Connected.");
}});
try{
s=new Scanner(new BufferedReader(new InputStreamReader(client.getInputStream())));
while(s.hasNext()){
longitude=Integer.parseInt(s.next());
System.out.println(longitude);
latitude=Integer.parseInt(s.next());
System.out.println(latitude);
// db.insertData2(longitude,latitude);
handler.post(new Runnable() {
public void run() {
DisplayTitle(longitude,latitude);
}
});
}
break;
}
catch(Exception e)
{
handler.post(new Runnable(){
public void run(){
serverStatus.setText("Connection interrupted!!");
}
});
e.printStackTrace();
}
}
}
catch(Exception e)
{
handler.post(new Runnable()
{
public void run(){
serverStatus.setText("Error");
}
});
e.printStackTrace();
}
}
}
public void DisplayTitle(int longitude,int latitude)
{
Toast.makeText(this,
"longitude: " + longitude +"\n" +
"latitude: " + latitude +"\n" ,
Toast.LENGTH_LONG).show();
}
}
如果有人有任何想法我做错了,请告诉我!我在这里了解更多细节。
你重定向使用控制台Telnet会话的端口,像REDIR添加TCP :XXXX:YYYY?如果不是,那么这将是你的问题。 – NickT 2011-04-18 19:12:20
是的是的......我已经做到了......我成功地连接了他们......问题是发送数据:) – adrian 2011-04-18 19:15:17