android中socket通信

yangwind 2012-11-05 08:26:16
我做一个小程序,是关于android手机扫描wifi信号,然后传送到电脑上的服务端。现在将代码copy过来,牛人帮忙看看那里出问题了。
========sever==================
package com.work;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.LinkedList;
import java.util.List;


public class gpsLocwifiServer {
private final static int PORT = 30000;

public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(PORT);
System.out.println("Server start: ");
Socket socket = ss.accept();
new Thread(new ServerThread(socket)).start();
}
}

//线程类
class ServerThread extends Thread {
Socket s = null;
ObjectInputStream objIn = null;
List<wifiSignal> wifiSignals;
List<String> sList;

public ServerThread(Socket s) throws IOException {
this.s = s;
objIn = new ObjectInputStream(s.getInputStream());
sList = new LinkedList<String>();
}

public void run() {
try {
//接收数据
System.out.println("接收数据:");
sList = (List<String>)objIn.readObject();

for(int i = 0; i < sList.size(); i++){
System.out.println(sList.get(i).toString());
}

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

===========client==================
package com.work;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.LinearLayout.LayoutParams;

public class GpsLocwifiActivity extends Activity {
private final static String TAG = "WiFiScan";
private final static int PORT = 30000;
private Button btnScanWifi;
private Button btnShowWifi;
private TextView txtShowList;
WifiManager mWifiManager = null;
private boolean isRunning = false;
private Handler handler;
private Runnable runnable;
Calendar calendar;
List<String> sList = new LinkedList<String>();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

btnScanWifi = (Button)findViewById(R.id.scan_wifi);
btnShowWifi = (Button)findViewById(R.id.show_wifi);
txtShowList = (TextView)findViewById(R.id.show_list);

btnShowWifi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i(TAG, "onClick() handler.sent()");
txtShowList.setText("");
txtShowList.append("====开始扫描并发送====\n");
for(int i = 0; i < 10; i++) {
sList.add("String:" + (i * 5));
}
QueryThread.start();
}
});
}

private Thread QueryThread = new Thread(){
public void run(){
try {
Log.i(TAG, "thread run()");
Socket socket = new Socket("192.168.0.1", PORT);
ObjectOutputStream objOut = new ObjectOutputStream(socket.getOutputStream());
txtShowList.append("开始传输数据:");
objOut.writeObject(sList);
txtShowList.append("数据传输完毕!!!");

objOut.close();
socket.close();

} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
};
}
为了方便分析,我将问题简化了,我感觉主要的问题是出在ObjectoutputStream、ObjectInputStream这两个函数。在android模拟器里,点击发送按钮后,client端程序就没有反应了,sever端也无任何反应,接收不到任何数据。再次点击按钮,client端直接死掉,望牛人帮忙自己分析一下原因,不胜感激...
...全文
125 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
j_f0001 2012-11-06
  • 打赏
  • 举报
回复
使用MIME框架

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧