Android中的socket编程,基础

来源:互联网 发布:酷派手机自动开启数据 编辑:程序博客网 时间:2024/06/10 05:21

本身就是菜鸟一枚。所以学习的一切东西都是在网上查找资料而得来的。不过如果中间可能会遇到一些问题,这些问题可能大家在学习的时候也会遇到,所以就很小心的记录了下来。

主要源码如下:

Android 客户端:

主要代码:

class MyThread extends Thread {        public String txt1;        public MyThread(String str) {            txt1 = str;        }        @Override        public void run() {            //定义消息            Message msg = new Message();            msg.what = 0x11;            Bundle bundle = new Bundle();            bundle.clear();            try {                //连接服务器 并设置连接超时为5秒                socket = new Socket();                //InetSocketAddress(服务端的ip地址,端口号) ip地址和端口号必须要与服务器端的对应,否侧则会提示连接失败。                socket.connect(new InetSocketAddress("192.168.1.35", 34562), 5000);                //获取输入输出流,获取服务端返回回来的信息的输入流。                OutputStream ou = socket.getOutputStream();                BufferedReader bff = new BufferedReader(new InputStreamReader(                        socket.getInputStream()));                //读取发来服务器信息                String line = null;                buffer="";                while ((line = bff.readLine()) != null) {                    buffer = line + buffer;                }                //向服务器发送信息                ou.write("android 客户端".getBytes("gbk"));                ou.flush();                bundle.putString("msg", buffer.toString());                msg.setData(bundle);                //发送消息 修改UI线程中的组件                myHandler.sendMessage(msg);                //关闭各种输入输出流                bff.close();                ou.close();                socket.close();            } catch (SocketTimeoutException aa) {                //连接超时 在UI界面显示消息                bundle.putString("msg", "服务器连接失败!请检查网络是否打开");                msg.setData(bundle);                //发送消息 修改UI线程中的组件                myHandler.sendMessage(msg);            } catch (IOException e) {                e.printStackTrace();            }        }    }

服务端主要代码

public class AndroidRunable implements Runnable {        Socket socket = null;        public AndroidRunable(Socket socket) {          this.socket = socket;      }        @Override      public void run() {          // 向android客户端输出hello worild          String line = null;          InputStream input;          OutputStream output;          String str = "hello world!";          try {              //向客户端发送信息              output = socket.getOutputStream();              input = socket.getInputStream();              BufferedReader bff = new BufferedReader(                      new InputStreamReader(input));              output.write(str.getBytes("gbk"));              output.flush();              //半关闭socket                socket.shutdownOutput();              //获取客户端的信息              while ((line = bff.readLine()) != null) {                  System.out.print(line);              }              //关闭输入输出流              output.close();              bff.close();              input.close();              socket.close();            } catch (IOException e) {              e.printStackTrace();          }        }  }  

个人在写的过程中,遇到的错误:


提示错误:

java.net.ConnectException: failed to connect to /192.168.1.1 (port 34562) after 5000ms: isConnected failed: ECONNREFUSED (Connection refused)

Caused by: libcore.io.ErrnoException: isConnected failed: ECONNREFUSED (Connection refused)


最后找的的原因,就是因为连接服务端的ip地址写错了。报错的错误是连接被拒绝,肯定第一时间在找服务端的问题,其实是客户端有问题。

代码是很简单的,如果如果想运行完整的代码,点击链接下载:

http://download.csdn.net/detail/lanxingfeifei/9818153

下载完代码,一定要记得更改程序中端口号和IP地址,否则会出现一些错误。

0 0