请教一个socket即时通信的问题,新人分不多,见谅 androidsocket 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有以下几个错误:1. System.out.println("接收数据"); socket = serverSocket.accept();这个可不是接收数据,accept是在接收连接。成功后才会返回这个socket。2.你竟然在while里面进行读取操作,而且还和accept在一起,大错特错,你只可能读取一次,第二次就阻塞了3.主要原因是你没理解accept是在干什么服务端至少需要2个线程来与客户端通信thread1:不断accept新连接thread2: 不断接收数据剩下可以定义个按钮之类的发送数据。。 确实是有种阻塞的感觉。。可是如果要不断接收数据的话,不写在while里写在哪里呢? 你accept一次后就得到一个新socket,那个这个socket的输入输出流你就能获取,另起线程循环读取数据嘛 您好,我写了两个线程还是没解决问题,麻烦您在帮我看一下,好人做到底,谢谢public class SocketServer extends Service { private int port = 3000; private ServerSocket serverSocket; private Socket socket; private InputStream inputStream; private BufferedReader bufferedReader; public static String message; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); System.out.println("SocketServer onCreat----------"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub try { serverSocket = new ServerSocket(port); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // beginListener(); new Thread(new MyThread()).start(); return super.onStartCommand(intent, flags, startId); } class MyThread implements Runnable { @Override public void run() { // TODO Auto-generated method stub while (true) { try { socket = serverSocket.accept(); new Thread(new MyThread2()).start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } class MyThread2 implements Runnable { @Override public void run() { // TODO Auto-generated method stub try { if (null != socket) { bufferedReader = new BufferedReader(new InputStreamReader( socket.getInputStream(), "UTF-8")); // while (!socket.isClosed()) { message = bufferedReader.readLine(); if (null != message) { Intent intent = new Intent(); intent.putExtra("msg", message); intent.setAction("com.intent.action.msg"); sendBroadcast(intent); System.out.println("message =" + message); } // } socket.close(); } } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } 急~~请教!如何向SDK中加入自定义的类? Android的关于蓝牙和后台播放音乐的一些问题 让人纠结的的android题目 android一个TABHOST的问题。送分超简单 高分求助关于同一个程序,未签名apk替换已签名apk的办法 android monkey 求助 这么多Unknown Source android 混合列表,这种界面是怎么做的呢? android蓝牙自动配对的问题 当服务器有新消息后,状态栏消息通知 android camera setPictureSize问题 Activity跳转闪退
1.
System.out.println("接收数据");
socket = serverSocket.accept();
这个可不是接收数据,accept是在接收连接。成功后才会返回这个socket。
2.
你竟然在while里面进行读取操作,而且还和accept在一起,大错特错,你只可能读取一次,第二次就阻塞了
3.主要原因是你没理解accept是在干什么服务端至少需要2个线程来与客户端通信
thread1:不断accept新连接
thread2: 不断接收数据
剩下可以定义个按钮之类的发送数据
。。
public class SocketServer extends Service { private int port = 3000;
private ServerSocket serverSocket;
private Socket socket;
private InputStream inputStream;
private BufferedReader bufferedReader;
public static String message; @Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
} @Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
System.out.println("SocketServer onCreat----------");
} @Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
try {
serverSocket = new ServerSocket(port);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// beginListener();
new Thread(new MyThread()).start(); return super.onStartCommand(intent, flags, startId);
} class MyThread implements Runnable { @Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
socket = serverSocket.accept();
new Thread(new MyThread2()).start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} } class MyThread2 implements Runnable { @Override
public void run() {
// TODO Auto-generated method stub
try {
if (null != socket) { bufferedReader = new BufferedReader(new InputStreamReader(
socket.getInputStream(), "UTF-8"));
// while (!socket.isClosed()) {
message = bufferedReader.readLine();
if (null != message) {
Intent intent = new Intent();
intent.putExtra("msg", message);
intent.setAction("com.intent.action.msg");
sendBroadcast(intent);
System.out.println("message =" + message);
}
// }
socket.close();
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}