通过上次的说明,在基本的app界面xml编好了之后,我们就开始写主程序文件。
变量申明
首先,tcp通讯需要的是服务器的ip地址和端口号,所以我们需要两个变量
private final String SERVER_HOST_IP = "192.168.199.191";//随便写的,根据自己需要改
private final int SERVER_HOST_PORT = 23333; ```
然后,我们需要有三个按钮和一个文本框
private Button btnConnect;
private Button btnOpen;
private Button btnClose;
private TextView state;```
接着,我们需要tcp通讯的相关控件
private Socket socket;
private PrintStream output;
private InputStream input;
private String readMessage;
private BufferedReader bufferedReader = null;```
最后,我们需要写一个函数,将控件和它们对应的id连接起来
public void initView()
{
btnClose = (Button)findViewById(R.id.btn1);
btnOpen = (Button)findViewById(R.id.btn2);
btnConnect= (Button)findViewById(R.id.btn3);
state = (TextView)findViewById(R.id.tx1);
}```
添加监听
因为按钮要实现的功能都不一样,所以我们需要对每个按钮添加对应的监听事件
- btnConnect
btnConnect.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v)
{
initClientSocket();
}
});```
2. btnOpen
btnOpen.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v)
{
sendMessage("(@devcall "MCU_RES" (uartdata "open") (lambda x x))"+"\r\n");
}
});```
- btnClose
btnClose.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v)
{
sendMessage("(@devcall \"MCU_RES\" (uartdata \"close\") (lambda x x))"+"\r\n");
}
});```
##初始化
对于一个socket通讯,我们首先要对它进行初始化,建立socket连接。
private void initClientSocket()
{
try
{
socket = new Socket(SERVER_HOST_IP, SERVER_HOST_PORT);
output = new PrintStream(socket.getOutputStream(), true, "utf-8");
GetLogTask task = new GetLogTask();
SendLogTask task1=new SendLogTask();
task.execute();
task1.execute();
sendMessage("(login\"xxx\"\"code\"\"xxx\" \"USER\")"+"\r\n");
}
catch (UnknownHostException e)
{
}
catch (IOException e)
{
}
}```
其中,sendMessage中间的信息是登录服务器用的,因此放在初始化函数里,只执行一次。我用的是我以前推荐的方法,所以可以当成一个示例,如果用的是别的服务器,可以根据自己的需要修改初始化代码。
其中GetLogTask是用来接收设备端信息的,而SendLogTask是用来发送心跳与服务器进行通讯的,具体代码等下次再说。
网友评论