当前位置: 代码迷 >> Eclipse >> TCP通信错误
  详细解决方案

TCP通信错误

热度:95   发布时间:2016-04-23 00:37:04.0
TCP通信异常
各位大侠好,这几天折腾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里应该很明显的把这个错误的原因打印出来了你怎么不看呢
  相关解决方案