Socket网络编程

  Socket 是计算机网络编程中的一种概念,用于在不同的计算机或同一台计算机上的不同程序之间进行通信。它是网络通信的基本构件,通过它可以发送和接收数据流。Socket 支持的协议包括 TCP 和 UDP,它们分别用于有连接和无连接的通信。

Android Studio新建项目

AndroidManifest.xml 文件中声明 INTERNET 权限,添加访问互联网的权限。
<uses-permission android:name="android.permission.INTERNET" />
访问的网站是:http://www.httpbin.org/get

public class MainActivity extends AppCompatActivity {

    // Used to load the 'socketnet' library on application startup.
    static {
        System.loadLibrary("socketnet");
    }

    private ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        // Example of a call to a native method
        TextView tv = binding.sampleText;
        tv.setText(stringFromJNI());

        Button GET = findViewById(R.id.get);
        GET.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("Button Clicked", "Button was clicked, starting network operation");

                // 子线程进行网络操作
                new Thread(new Runnable() {

                    @Override
                    public void run() {

                        try {
                            Socket socket = new Socket("www.httpbin.org", 80);

                            // 构建HTTP GET请求
                            String content = "GET /get HTTP/1.1\r\n" +
                                    "Host: www.httpbin.org\r\n" +
                                    "\r\n";
                            OutputStream outputStream = socket.getOutputStream();
                            outputStream.write(content.getBytes());

                            InputStream inputStream = socket.getInputStream();
                            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
                            String line;
                            StringBuilder response = new StringBuilder();
                            while ((line = reader.readLine()) != null) {
                                response.append(line).append("\n");
                            }

                            // 打印响应内容到 Logcat
                            Log.d("Server Response", response.toString());

                            // 在主线程中显示 Toast
                            runOnUiThread(() -> {
                                Toast.makeText(MainActivity.this, response.toString(), Toast.LENGTH_SHORT).show();
                            });

                            reader.close();
                            socket.close();

                        } catch (IOException e) {
                            e.printStackTrace();
                            // 在主线程中显示错误 Toast
                            runOnUiThread(() -> {
                                Toast.makeText(MainActivity.this, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
                            });
                        }
                    }
                }).start();
            }
        });
    }
    public native String stringFromJNI();
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值