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();
}