package androidclient.test;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;public class AndroidClient_Activity extends Activity { @Override
public void onCreate(Bundle savedInstanceState) {
//System.out.println("开始请求");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_android_client_);
//System.out.println("开始请求");
try {
java.net.Socket sc = new Socket(InetAddress.getByName("192.168.1.100"),2024);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("已发出请求");

} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_android_client_, menu);
return true;
}}我已经运行server端了,已经输出在监听,但我启动client后,一直连接不上server,我在oncreate()方法中前后添加几个输出语句,也都没反应,也没输出啥异常,求各位大神帮我看一下,感激不尽……android socket

解决方案 »

  1.   

    是本机……如果连上server的话,我有让server端在控制台输出已连上
      

  2.   

    那你看看改成localhost或127.0.0.1是不是还是一样有问题呢?
      

  3.   

    呵呵,问题不大,会解决的。
    你能写数据,就说明连上了啊。会不会你server端处理的有点问题?
      

  4.   

    package server;import java.io.IOException;public class PC_Server {

    private int port=2024;
    private java.net.Socket client;

    /** 
    * 发送文件的方法 
    * 此处定义服务器端口为3306,ip地址为192.168.1.100 
    * 设定被传输图片的路径为"images/android.jpg" 
    * images文件夹放在此工程的根目录下,我们就可以通过相对路径访问这个图片文件了 
    */ 


    public void sendPic() { 

    try { 

    // 创建服务器 
    java.net.ServerSocket ss = new java.net.ServerSocket(port); 
    // 等待客户机接入,此处会阻塞,直到有客户机接入服务器 
    System.out.println("waiting……");
    client = ss.accept(); 
    //显示已连接客户端
    System.out.println("Receive connection");
    //创建将要被发送的图片的文件输入流 
    java.io.FileInputStream fin = new java.io.FileInputStream("images/android.jpg"); 
    //获得套接字的输出流,并包装成数据输出流 
    java.io.DataOutputStream dou = new java.io.DataOutputStream(client 
    .getOutputStream()); 
    // 向输出流中写入文件数据长度 
    dou.writeInt(fin.available());//注:此处未考虑图片太大超出int范围,以至于出现内存溢出的情况 
    // 将实际的图片数据读取到byte[] data中 
    byte[] data = new byte[fin.available()]; 
    fin.read(data); 
    // 将图片数据写入到输出流中 
    dou.write(data); 
    dou.flush(); 
    fin.close();
    ss.close();
    } catch (IOException e) { 
    e.printStackTrace(); 

    finally{
            try{
                 if(client != null)  client.close();
           }catch(IOException e){e.printStackTrace();}
       }




    public static void main(String args[]) throws IOException
    {
    PC_Server pc_server=new PC_Server();
    pc_server.sendPic();

    }}
    这是服务端的代码
      

  5.   

    你看到"waiting……"但是没看到"Receive connection"?
      

  6.   

    问题来了,传到客户端的照片读不出来,抛出异常了waiting……
    Receive connection
    java.net.SocketException: Connection reset by peer: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(Unknown Source)
    at java.net.SocketOutputStream.write(Unknown Source)
    at java.io.DataOutputStream.write(Unknown Source)
    at java.io.FilterOutputStream.write(Unknown Source)
    at server.PC_Server.sendPic(PC_Server.java:40)
    at server.PC_Server.main(PC_Server.java:59)package androidclient.test;
    import java.io.IOException;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;public class AndroidClient_Activity extends Activity implements Runnable{ android.widget.ImageView image;// 用于显示接收到的图片的ImageView对象
    java.net.Socket sc;
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_android_client_);
    try {
     sc = new Socket(InetAddress.getByName("192.168.1.100"),2024);
    } catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    // 启动读取套接字中数据并进行处理的线程 
    new Thread(this).start();// 本类继承了Runnable接口,所以创建线程时将本类的对象传入即可 

    } @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_android_client_, menu);
    return true;
    } /** 
    * 由于输入流的read方法会阻塞,为了避免它影响主界面的其他数据处理, 启动一个线程来读取输入流中的数据,并对数据进行相应的处理 
    */ 
    @Override
    public void run() {
    // TODO Auto-generated method stub
    try{
    // 获得界面显示图片的ImageView对象 
    image = (android.widget.ImageView) findViewById(R.id.image); 
    // 获得套接字的输入流并包装成基本数据输入流 
    java.io.DataInputStream din = new java.io.DataInputStream(sc 
    .getInputStream()); 

    // 不断监听输入流的数据情况 
    while (true) { 
    // 当流中有数据时,读取数据并进行处理 
    if (din.available() > 0) { 

    // 创建data数组并将流中数据读取到数组中 
    byte[] data = new byte[din.readInt()];// 注此处同样没有处理图片大小超过int的范围的情况 
    din.read(data); 

    // 根据读到的文件数据创建Bitmap对象bitmap,因为将要在后面的内部类中使用bitmap,所以定义为 
    // final型 
    final android.graphics.Bitmap bitmap = android.graphics.BitmapFactory 
    .decodeByteArray(data, 0, data.length); 

    // 将图片显示到ImageView上 
    // 此处由于view中的组件都是线程不安全的,使用android提供的这个办法处理(详见下文“附2”) 
    image.post(new Runnable() { 

    public void run() { 
    // 将bitmap显示到界面上 
    image.setImageBitmap(bitmap); 

    }); 


    // 线程休息1s 
    Thread.sleep(1000); 


    } catch (Exception e) { 
    e.printStackTrace(); 


    }}
      

  7.   

    你必须使用socket.getInputStream()和socket.getOutputStream 通过socket来沟通。
    参照这个client事例http://zerioh.tripod.com/ressources/sockets.html
     
      

  8.   

    樓主的工程例子文件可以打包發送過來嗎?學習下,MAIL:[email protected] 非常感謝
      

  9.   

    我想知道图片怎么弄,也可以是object的形式吗?传到手机又怎么和文本区分出来显示?