android开发步步为营之6:客户端通过tcp和服务端进行交互

本文通过一个简单的客户端和服务端示例,展示了如何使用TCP协议进行登录请求及响应处理。

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

TCPTransmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETFRFC 793说明(specified)。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。

本文模拟客户端通过TCP向服务端发起登录请求来实现这一功能。

一、服务端

package com.figo.helloworld.action;

 

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

 

/**

 服务端Tcp登录接口,接收客户端登录请求

 *

 @author zhuzhifei 版权所有

 *

 */

public class TcpAction implements Runnable {

 

    /**

     @param args

     */

    public static void main(String[] args) {

       // TODO Auto-generated method stub

       System.out.println("start");

       Thread desktopServerThread = new Thread(new TcpAction());

       desktopServerThread.start();

    }

 

    public void run() {

       try {

           // 创建ServerSocket

           ServerSocket serverSocket = new ServerSocket(8088);// 设置8088端口

           while (true) {

              // 接受客户端请求

              Socket client = serverSocket.accept();

              System.out.println("accept");

              try {

                  // 接收客户端消息

                  BufferedReader in = new BufferedReader(

                         new InputStreamReader(client.getInputStream()));

                  String str = in.readLine();

                  System.out.println("read:" + str);

                  // 向服务器发送消息

                  PrintWriter out = new PrintWriter(new BufferedWriter(

                         new OutputStreamWriter(client.getOutputStream())),

                         true);

                  if ("123|abc".equals(str)) {

                     out.println("server message:" + "login success");

                  else {

                     out.println("server message:"

                            "userName or password is error");

                  }

                  // 关闭流

                  out.close();

                  in.close();

              catch (Exception e) {

                  System.out.println(e.getMessage());

                  e.printStackTrace();

              finally {

                  // 关闭

                  client.close();

                  System.out.println("close");

              }

           }

       }

 

       catch (Exception e) {

           System.out.println(e.getMessage());

       }

    }

}

二、客户端

 

package com.figo.helloworld;

 

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.InetSocketAddress;

import java.net.Socket;

import java.net.SocketTimeoutException;

 

import org.apache.http.conn.ConnectTimeoutException;

 

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

 

/**

 这个Activity模拟使用Socket通信来调用服务端的登录接口

 *

 * @author zhuzhifei 版权所有

 *

 */

public class TcpActivity extends Activity {

 

         Button buttonLogin;

         EditText etUserName;

         EditText etPwd;

         TextView tvResult;

 

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.tcptest);

                   buttonLogin = (Button) findViewById(R.id.buttonLogin);

                   etUserName = (EditText) findViewById(R.id.etUserName);

                   etPwd = (EditText) findViewById(R.id.etPwd);

                   tvResult = (TextView) findViewById(R.id.tvResult);

                   buttonLogin.setOnClickListener(new OnClickListener() {

 

                            @Override

                            public void onClick(View v) {

                                     Socket socket = null;

                                     String message = etUserName.getText().toString() + "|"

                                                        + etPwd.getText().toString();

                                     try {

                                               // 创建Socket

                                               socket = new Socket();

                                               socket.connect(new InetSocketAddress("10.241.72.35", 8088),

                                                                 30000);// 30秒钟连接超时

                                               socket.setSoTimeout(30000);// 30秒钟通信超时

                                               socket.setTcpNoDelay(true);

                                               // 向服务器发送消息

                                               PrintWriter out = new PrintWriter(new BufferedWriter(

                                                                 new OutputStreamWriter(socket.getOutputStream())),

                                                                 true);

                                               out.println(message);

                                               // 接收来自服务器的消息

                                               BufferedReader br = new BufferedReader(

                                                                 new InputStreamReader(socket.getInputStream()));

                                               String msg = br.readLine();

                                               if (msg != null) {

                                                        tvResult.setText(msg);

                                               } else {

                                                        tvResult.setText("数据错误!");

                                               }

                                               // 关闭流

                                               out.close();

                                               br.close();

                                               // 关闭Socket

                                               socket.close();

                                     } catch (ConnectTimeoutException e) {

                                               Log.e("tcp", e.toString());

                                     } catch (SocketTimeoutException e) {

                                               Log.e("tcp", e.toString());

                                     } catch (Exception e) {

                                               Log.e("tcp", e.toString());

                                     }

                            }

                   });

         }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值