Android客户端无法连接

时间:2013-01-29 09:50:02

标签: java android

我正在尝试将JAVA服务器连接到Android应用程序,但我没有做到.....

这是我的服务器......

package com.example.androidserver;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerMain 
{
public static void main(String []args)
{
    ServerSocket ss;
    try 
    {
        ss = new ServerSocket(7654);
        Socket socket = ss.accept();

        boolean t = socket.isConnected();
        if(t)
        {
            System.out.println("Client connected");
        }
    }
    catch (IOException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


}
}

这是客户......

package com.example.androidclient;

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

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

public class MainActivity extends Activity {

Button send;
EditText et1;
Socket socket;
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    new Thread()
    {
        public void run()
        {
            try
            {
                socket = new Socket("localhost", 7654);
                boolean t = socket.isConnected();
                if(t)
                {
                    Toast.makeText(getBaseContext(), "Connected", Toast.LENGTH_LONG).show();
                }
            } 
            catch (UnknownHostException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
            catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }.start();
    send = (Button)findViewById(R.id.button1);
    et1= (EditText)findViewById(R.id.editText1);

    send.setOnClickListener(new OnClickListener(){

        public void onClick(View v) {
            String str;
            str = et1.getText().toString();
            Toast.makeText(getBaseContext(), str, Toast.LENGTH_LONG).show();
        }});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

}

XML文件..

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true" >

    <requestFocus />
</EditText>

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/editText1"
    android:text="Send" />

</RelativeLayout>

我没有弄错...我的客户端服务器没有连接......请帮我纠正...

2 个答案:

答案 0 :(得分:0)

我认为你的问题在这里:socket = new Socket(“localhost”,7654); 为什么是localhost?它应该是服务器IP地址。

还有另一个问题:

Toast.makeText(getBaseContext(), "Connected", Toast.LENGTH_LONG).show();

你不能从非UI线程中显示吐司。 Read this.

答案 1 :(得分:0)

localhost指的是执行代码的计算机,在Android应用程序的上下文中是电话或模拟器,而不是您的开发计算机。

测试场景的最佳方法是将手机连接到开发机器所连接的同一本地无线网络,并使用机器的IP地址,而不是localhost