Android中的socket编程,基础

本文分享了一个简单的Android客户端与服务端通信的例子,包括客户端和服务端的主要代码。通过实例解决连接失败等问题,并提供完整代码下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

主要源码如下:

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.youkuaiyun.com/detail/lanxingfeifei/9818153

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值