import java.net.ServerSocket;
import java.net.Socket;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
Socket socket;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
System.out.println("-----halder-----2-----------");
if (msg.what == 1) {
System.out.println("---------------handle-----3");
String str = (String) msg.obj;// 子线程中socket取出来的字符串传到主线程
System.out.println(str+"----------str--------------");
tv.setText(str);// 把字符产放到TextView里
} else if (msg.what == 2) {
System.out.println("----------555--------------");
new Thread(new AndroidRunable(socket, handler)).start();
}
}
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTv((TextView) findViewById(R.id.aip));
System.out.println("-----------main--------1-------");
try {
System.out.println("-----------main--------2-------"); final ServerSocket serivce = new ServerSocket(8080);
new Thread(new Runnable() { @Override
public void run() {
// TODO Auto-generated method stub
try {
System.out.println("-----------main--------3-------"); socket = serivce.accept();
System.out.println("-----------main--------4-------");
handler.sendEmptyMessage(2); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
// new Thread(new AndroidService(serivce , handler)).start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 创建一个ServerSocket,用于监听客户端Socket的连接请求 } public TextView getTv() {
return tv;
} public void setTv(TextView tv) {
this.tv = tv;
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import android.os.Handler;
import android.os.Message;
public class AndroidRunable implements Runnable { Socket socket = null;
Handler handler = null; public AndroidRunable(Socket socket, Handler handler) {
this.socket = socket;
this.handler = handler; } @Override
public void run() {
// 向android客户端输出hello world
String line = null;
InputStream input;
OutputStream output;
String str = "hello world!";
System.out.println("----Lianjei-----------8");
Message message = new Message();
System.out.println("----Lianjei-----------9");
try {
// 向客户端发送信息
output = socket.getOutputStream();
System.out.println("----Lianjei-----------10");
input = socket.getInputStream();
System.out.println("----Lianjei-----------11");
BufferedReader bff = new BufferedReader(new InputStreamReader(
input));
System.out.println("----Lianjei-----------12");
output.write(str.getBytes("gbk"));
output.flush();
// 半关闭socket
socket.shutdownOutput();
//获取客户端的信息
line = bff.readLine();
System.out.println(line + "------------------------");
while ((line = bff.readLine()) != null) {
System.out.println("----Lianjei-----------13");
message.what = 1;
message.obj = line;
handler.sendMessage(message); }
// 关闭输入输出流
output.close();
bff.close();
input.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
} }
}
服务器能和客户端建立连接,但是客户端不能向服务器端发数据,然后我单步调试,程序没问题,但是总的运行就不行了
求大神帮忙看下
import java.net.Socket;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
Socket socket;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
System.out.println("-----halder-----2-----------");
if (msg.what == 1) {
System.out.println("---------------handle-----3");
String str = (String) msg.obj;// 子线程中socket取出来的字符串传到主线程
System.out.println(str+"----------str--------------");
tv.setText(str);// 把字符产放到TextView里
} else if (msg.what == 2) {
System.out.println("----------555--------------");
new Thread(new AndroidRunable(socket, handler)).start();
}
}
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTv((TextView) findViewById(R.id.aip));
System.out.println("-----------main--------1-------");
try {
System.out.println("-----------main--------2-------"); final ServerSocket serivce = new ServerSocket(8080);
new Thread(new Runnable() { @Override
public void run() {
// TODO Auto-generated method stub
try {
System.out.println("-----------main--------3-------"); socket = serivce.accept();
System.out.println("-----------main--------4-------");
handler.sendEmptyMessage(2); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
// new Thread(new AndroidService(serivce , handler)).start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 创建一个ServerSocket,用于监听客户端Socket的连接请求 } public TextView getTv() {
return tv;
} public void setTv(TextView tv) {
this.tv = tv;
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import android.os.Handler;
import android.os.Message;
public class AndroidRunable implements Runnable { Socket socket = null;
Handler handler = null; public AndroidRunable(Socket socket, Handler handler) {
this.socket = socket;
this.handler = handler; } @Override
public void run() {
// 向android客户端输出hello world
String line = null;
InputStream input;
OutputStream output;
String str = "hello world!";
System.out.println("----Lianjei-----------8");
Message message = new Message();
System.out.println("----Lianjei-----------9");
try {
// 向客户端发送信息
output = socket.getOutputStream();
System.out.println("----Lianjei-----------10");
input = socket.getInputStream();
System.out.println("----Lianjei-----------11");
BufferedReader bff = new BufferedReader(new InputStreamReader(
input));
System.out.println("----Lianjei-----------12");
output.write(str.getBytes("gbk"));
output.flush();
// 半关闭socket
socket.shutdownOutput();
//获取客户端的信息
line = bff.readLine();
System.out.println(line + "------------------------");
while ((line = bff.readLine()) != null) {
System.out.println("----Lianjei-----------13");
message.what = 1;
message.obj = line;
handler.sendMessage(message); }
// 关闭输入输出流
output.close();
bff.close();
input.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
} }
}
服务器能和客户端建立连接,但是客户端不能向服务器端发数据,然后我单步调试,程序没问题,但是总的运行就不行了
求大神帮忙看下
解决方案 »
- 老罗将死,或者Android也将就换代,但是互联网的,共享,互助精神将永存
- MediaRecorder录像怎么旋转呀?
- JNI 运行警告,如何去除。
- ListView 异步加载问题
- 安卓平板的模拟器怎么用????
- 对于Android 的发展,我有一个小想法, 不知是否可行?
- Android ffmpeg 取流解码显示
- 【求助】数据库操作遇到错误
- 求问大神,这个是什么意思?在安装Android Studio,创建第一个个项目报如下的错是什么意思?Re-download dependencies and s
- app编译后无法,连接网络失败,大神求帮忙?
- TextView放大后 跑马灯有残留
- 基于Android的学生选课系统设计与实现
问题在于不知道为什么 我把启动为客户端服务的子线程写在死循环里
while(true){
new Thread(new AndroidRunable(socket, handler)).start();
}
这样 我的客户端就连一下就自动断开,不能长时间连接服务器。
但是把while(true)给去掉,就能正常连接服务器 但是传数据的话不能实时传输
while(true){
new Thread(new AndroidRunable(socket, handler)).start();
}
这段代码是不是一直在new 一个线程。这个开销逻辑我觉得很不合理。还有AndroidRunable这个线程执行任务,任务执行一次就结束关闭了。收不到数据不奇怪。