各位大侠好,这几天折腾TCP通信,颇为受挫,自知功力尚浅,犯了不少低级错误。不过闻道有先后,术业有专攻,小女子不怕丢脸,就怕终有一日丢了一颗不断学习的心,特来请各位大侠予以指教!
话不多说,之前将PC做客户端,手机做服务器,碰到了不少问题,解决过程中,尝试先换个角度试试,将PC做服务器,手机做客户端,想先用最简单的代码实现TCP通信,服务器端运行正常,但客户端logcat一直报错先将代码贴出如下:
服务器端:
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @version 1.0
*/
public class SimpleServer {
public static void main(String[] args) throws IOException {
// 创建一个ServerSocket,用于监听客户端Socket的连接请求
ServerSocket ss = new ServerSocket(30000);
// 采用循环不断接受来自客户端的请求
while (true) {
// 每当接受到客户端Socket的请求,服务器端也对应产生一个Socket
Socket s = ss.accept();
OutputStream os = s.getOutputStream();
os.write("您好,您收到了服务器的新年祝福!\n".getBytes("utf-8"));
// 关闭输出流,关闭Socket
os.close();
s.close();
}
}
}
客户端:
package com.example.simpleclient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
public class MainActivity extends Activity {
private EditText show;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
show = (EditText) this.findViewById(R.id.show);
try {
Socket s = new Socket("192.168.1.101", 30000);
BufferedReader br = new BufferedReader(new InputStreamReader(
s.getInputStream()));
String line = br.readLine();
show.setText("HelloCaiCai,这是来自服务器的问候:" + line);
br.close();
s.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
logcat中的报错主要是指这一行: Socket s = new Socket("192.168.1.101", 30000);
请问哪里错了呢?
Manifest文件中已授予INTERNET权限
另外,手机端一运行此程序即出现“很抱歉,SimpleClient已停止运行”的警告框。。。
------解决方案--------------------
Socket s = new Socket("192.168.1.101", 30000);
String line = br.readLine();
妹子啊,你怎么还是犯了和之前一样的错误。。
遭不住,,
Android程序第一条戒律:不要在主线程(例如onCreate方法)里调用任何阻塞性的API,譬如网络io相关的API
logcat里应该很明显的把这个错误的原因打印出来了你怎么不看呢