首页 > 其他分享 >Android TCP客户端

Android TCP客户端

时间:2022-11-12 19:00:14浏览次数:62  
标签:layout void TCP ui new Android 客户端 id android


文章目录

  • ​​一、创建工程​​
  • ​​二、添加网络权限​​
  • ​​三、添加布局代码​​
  • ​​四、添加逻辑代码​​
  • ​​五、通信测试​​
  • ​​六、源码分享​​

一、创建工程

Android TCP客户端_android


Android TCP客户端_tcp/ip_02


Android TCP客户端_android_03


二、添加网络权限

<uses-permission android:name="android.permission.INTERNET"/>

Android TCP客户端_android_04


三、添加布局代码

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"
android:background="#FFFFFF">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="5dp"
android:background="#FFFFFF">

<EditText
android:id="@+id/ui_ipText"
android:layout_width="320dp"
android:layout_height="50dp"
android:hint="IP" />

<Button
android:id="@+id/ui_connectBtn"
android:layout_width="100dp"
android:layout_height="50dp"
android:text="连接"
android:textColor="#FFFFFF"
android:background="#FF0000"/>

</LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="5dp"
android:background="#FFFFFF">

<EditText
android:id="@+id/ui_portText"
android:layout_width="320dp"
android:layout_height="50dp"
android:hint="Port" />

<Button
android:id="@+id/ui_disconnectBtn"
android:layout_width="100dp"
android:layout_height="50dp"
android:text="断开"
android:textColor="#FFFFFF"
android:background="#FF0000"/>

</LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginBottom="5dp"
android:background="#FFFFFF">

<EditText
android:id="@+id/ui_receiveText"
android:layout_width="match_parent"
android:layout_height="300dp"
android:hint="receive message" />

<Button
android:id="@+id/ui_clearBtn"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="清除"
android:textColor="#FFFFFF"
android:background="#FF0000"/>

</LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginBottom="5dp"
android:background="#FFFFFF">

<EditText
android:id="@+id/ui_sendText"
android:layout_width="match_parent"
android:layout_height="220dp"
android:hint="send message" />

<Button
android:id="@+id/ui_sendBtn"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="发送"
android:textColor="#FFFFFF"
android:background="#FF0000"/>

</LinearLayout>

</LinearLayout>

四、添加逻辑代码

MainActivity.java

package com.example.tcp_client_android;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class MainActivity extends AppCompatActivity {

String _IP;
int _Port;
connectthread netThread;
Socket socket = null;

EditText IPArea = null;
EditText PortArea = null;
Button connectBtn;
Button disconnectBtn;
EditText receiveArea = null;
EditText sendArea = null;
Button clearBtn;
Button sendBtn;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Init_UI();
}

public void Init_UI() {
IPArea=findViewById(R.id.ui_ipText);
PortArea=findViewById(R.id.ui_portText);
receiveArea=findViewById(R.id.ui_receiveText);
sendArea=findViewById(R.id.ui_sendText);

connectBtn=findViewById(R.id.ui_connectBtn);
connectBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
_IP=IPArea.getText().toString();
String c=PortArea.getText().toString();
if("".equals(_IP)||"".equals(c)){
Toast.makeText(MainActivity.this,"请输入ip和端口号",Toast.LENGTH_SHORT).show();
}else{_Port=Integer.valueOf(c);
netThread = new connectthread();
netThread.start();}
}
});

disconnectBtn=findViewById(R.id.ui_disconnectBtn);
disconnectBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

}
});

clearBtn=findViewById(R.id.ui_clearBtn);
clearBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

}
});

sendBtn=findViewById(R.id.ui_sendBtn);
sendBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String sendMsg = sendArea.getText().toString();
sendAction(sendMsg);
}
});
}

//==============================================================================================
//子线程中进行网络相关操作
class connectthread extends Thread {
OutputStream outputStream=null;
InputStream inputStream=null;

@Override
public void run() {
//连接
try {
socket=new Socket(_IP, _Port);
runOnUiThread(new Runnable()//不允许其他线程直接操作组件,用提供的此方法可以
{
public void run()
{
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,"连接成功",Toast.LENGTH_SHORT).show();
}
});
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
runOnUiThread(new Runnable()//不允许其他线程直接操作组件,用提供的此方法可以
{
public void run()
{
// TODO Auto-generated method stub
//Toast.makeText(MainActivity.this,"连接失败",Toast.LENGTH_SHORT).show();
}
});
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
runOnUiThread(new Runnable()//不允许其他线程直接操作组件,用提供的此方法可以
{
public void run()
{
// TODO Auto-generated method stub
//Toast.makeText(MainActivity.this,"连接失败",Toast.LENGTH_SHORT).show();
}
});
}
if(socket!=null){
//获取输出流对象
try {
outputStream=socket.getOutputStream();
outputStream.write(123);
} catch (IOException e) {
e.printStackTrace();
}

try{
while (true)
{
final byte[] buffer = new byte[1024];//创建接收缓冲区
inputStream = socket.getInputStream();
final int len = inputStream.read(buffer);//数据读出来,并且返回数据的长度
runOnUiThread(new Runnable()//不允许其他线程直接操作组件,用提供的此方法可以
{
public void run()
{
// TODO Auto-generated method stub
receiveArea.append(new String(buffer,0,len)+"\r\n");
//Toast.makeText(MainActivity.this,new String(buffer,0,len)+"\r\n",Toast.LENGTH_SHORT).show();
}
});
}
}
catch (IOException e) {

}
}
};
}

public void sendAction(String msg) {
//子线程中进行网络操作
new Thread(new Runnable() {
@Override
public void run() {
if(socket!=null){
try {
netThread.outputStream.write(msg.getBytes());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();

}catch (IOException e) {
e.printStackTrace();
}
}else{
runOnUiThread(new Runnable()//不允许其他线程直接操作组件,用提供的此方法可以
{
public void run()
{
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,"请先建立连接",Toast.LENGTH_SHORT).show();
}
});
}
}
}).start();
}
}

五、通信测试

Android TCP客户端_ui_05


Android TCP客户端_tcp/ip_06


六、源码分享

​链接:https://pan.baidu.com/s/1jqviFiIaOCKd0ucxRgQC0g​​ 提取码:qyv8


标签:layout,void,TCP,ui,new,Android,客户端,id,android
From: https://blog.51cto.com/wangjichuan/5846761

相关文章

  • Android开发linux下使用命令行安装android_sdk开发环境
    在https://developer.android.com/studio选择下载Commandlinetoolsonly然后按照https://developer.android.com/studio/command-line/sdkmanager步骤操作从Android......
  • go错误汇总2:[ERROR] listen tcp: address 8082: missing port in address
    go错误汇总2:[ERROR]listentcp:address8082:missingportinaddress错误信息:[ERROR]listentcp:address8082:missingportinaddress 错误原因:代......
  • php程序获取客户端MAC地址
    <?php/***获取网卡的MAC地址原码;目前支持WIN/LINUX系统*获取机器网卡的物理(MAC)地址**/classGetMacAddr{var$return_array=array();//返回带有MAC地......
  • 【lwip】12-一文解决TCP原理
    目录前言12.1TCP协议简介12.2TCP相关的一些概念词12.2.1MSL12.2.2MSS12.3TCP工作特性12.3.1面向连接12.3.2全双工通信12.3.3可靠性12.3.4缓冲机制12.3.5拥塞控制......
  • Android上传文件用php接收
    废话不多说直接上代码导包implementation'com.loopj.android:android-async-http:1.4.11'http声明 <applicationandroid:usesCleartextTraffic="t......
  • 10.http客户端feign
    http客户端feignRestTemplate方式调用存在的问题先来看我们以前利用RestTemplate发起远程调用的代码:Stringurl="http://userservice/user/"+order.getUserld();Us......
  • Redis各个客户端的对比
    【SpringRedisTemplate的底层一开始使用Jedis、但是自从SpringBoot2开始,底层开始使用了Lettuce,故不算在内】         【题外话:如果要使用Spring来集......
  • 关于单机最大tcp连接数 及 linux …
    在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接。那么对单机,其最大并发tcp连接数是多少?如何标识一个TCP连接ip, local port,remo......
  • Android实战简易教程-第五十六枪(模拟美团客户端进度提示框)
    用过美团客户端的朋友都知道,美团的加载等待提示很有意思,是一种动画的形式展现给我们,下面我们就对这背后的原理进行了解,然后实现自己的等待动画效果。首先我们准备两张图片:这......
  • Ubuntu 1404 x64搭建Android开发环境
      最近在自己搭建了Android开发环境,在此记录一下。   一、安装配置JAVAJDK  不在此详细赘述, 验证:在终端中输入java、javac有信息输出。  二、安装配置A......