最简单的socket通信 为啥不行?

匿名少侠 2014-10-22 04:04:04
求教 今天跑了网上的 socket通信 最简单的那种。用模拟机的,就是没反应,啥情况 别人都可以。
permission 也加了

服务器:
package com.example.server;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Main {
private static final int PORT = 8853;
public static void main(String[] args) {

try {
// 实例化服务器套接字 设置端口号9999
ServerSocket s = new ServerSocket(PORT);
while (true) {
Socket socket = s.accept();
// 获取输出流
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream()));
// 写字符串
writer.write("这是一段来自服务器的问候:Hello!");
writer.flush();
writer.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


客户端:
package com.example.server;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

@SuppressLint("HandlerLeak")
public class MainActivity extends Activity {

/** Called when the activity is first created. */
private Button btn_receive;
private TextView txt;
private String line;

private static final String HOST = "192.168.1.101";
private static final int PORT = 8853;

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

private void initControl() {
btn_receive = (Button) findViewById(R.id.btn_receive);
txt = (TextView) findViewById(R.id.txt);
btn_receive.setOnClickListener(new ReceiverListener());
}

@SuppressLint("HandlerLeak")
class ReceiverListener implements OnClickListener {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new Thread() {
@Override
public void run() {
// 执行完毕后给handler发送一个空消息
try {
// 实例化Socket
Socket socket = new Socket(HOST, PORT);
// 获得输入流
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
line = br.readLine();
br.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.sendEmptyMessage(0);
}
}.start();
}

}

// 定义Handler对象
private Handler handler = new Handler() {
@Override
// 当有消息发送出来的时候就执行Handler的这个方法
public void handleMessage(Message msg) {
super.handleMessage(msg);
// 处理UI
txt.setText(line);
Log.i("PDA", "----->" + line);
}
};
}


点按钮没反应 没显示。
求教大神,

是版本问题吗?4.4的,不过这网上 人家说可以跑吗?
...全文
342 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
匿名少侠 2014-10-25
  • 打赏
  • 举报
回复
引用 2 楼 kifile 的回复:
使用的 avd 还是 genymotion? 如果是 avd 的话,你的服务器地址就配置错了, android avd 默认的主机地址应该是10.0.2.2而不是192.168.1.101 如果是 genymotion, 你最好打一些日志信息出来,例如给 SocketServer 设置超时时间什么的,不然我们很难凭空揣测问题
谢谢啊 确实是用的AVD 成功了,TCP后面的应该 做些什么啊?
哎,真难 2014-10-23
  • 打赏
  • 举报
回复
debug看下呗,是否建立连接了
Rdxer 2014-10-23
  • 打赏
  • 举报
回复
网络权限加了没有
Kifile 2014-10-22
  • 打赏
  • 举报
回复
使用的 avd 还是 genymotion? 如果是 avd 的话,你的服务器地址就配置错了, android avd 默认的主机地址应该是10.0.2.2而不是192.168.1.101 如果是 genymotion, 你最好打一些日志信息出来,例如给 SocketServer 设置超时时间什么的,不然我们很难凭空揣测问题
Birds2018 2014-10-22
  • 打赏
  • 举报
回复
writer.write("这是一段来自服务器的问候:Hello!"); 这个发送字符你需要添加\r\n 你试试,你是按行读的。 不知道你后台可有什么错误。

80,351

社区成员

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

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