本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
Android基于TCP协议的Socket通信简单实例
奔跑的男人 · 313浏览 · 发布于2020-03-03 +关注

Socket通信有两种主要方式:TCP协议和UDP协议,两者区别是TCP协议要首先和接收方要建立连接然后发送数据,这样数据能保证送达,但速度较慢;UDP协议首先把数据打包,然后直接发送到接收方,无需建立连接诶,速度快,但容易丢失数据。这里是一个简单的基于TCP协议的通信实例:

直接上代码:

首先是java服务器的编写:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class netserver {
    public static void main(String[] args) throws IOException {
        
        
        
        ServerSocket server=new ServerSocket(9090);//9090是端口号,由自己设置
        System.out.println("服务器已启动");
        Socket client=server.accept();//接收客户端请求
//        PrintStream out=new PrintStream(client.getOutputStream());
        PrintWriter out=new PrintWriter(new OutputStreamWriter(client.getOutputStream(),"UTF-8"),true);
        BufferedReader msg=new BufferedReader(new InputStreamReader(client.getInputStream(),"UTF-8"));//对缓冲区数据读取
    StringBuffer info=new StringBuffer();//接收客户端发来的消息
    
    info.append("I'm fine.你好! ");//回应的数据
    info.append(msg.readLine());//接收的数据
    System.out.println(info);//控制台输出将要发出的信息
    out.print(info);//发送到客户端
    out.close();
    msg.close();
    client.close();
    server.close();
    
    }
}

接下来是安卓客户端的代码:

package com.example.scoket;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class MainActivity extends AppCompatActivity {
private Button send=null;
private TextView info=null;
private Handler handler=null;
private String s="";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        send=(Button)findViewById(R.id.send);
        info=(TextView) findViewById(R.id.info);
        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread()
                {
                    public void run(){
                        try {
                            Socket client=new
Socket("10.0.2.2",9090);//括号内为(服务器,端口号)
                           
                            PrintStream out=new PrintStream(client.getOutputStream());                
                            BufferedReader msgget=new BufferedReader(new InputStreamReader(client.getInputStream(),"UTF-8"));//读取返回的数据
                            out.println("已连接服务器");
                            s=msgget.readLine();
                            out.close();
                            msgget.close();
                            client.close();
                        }
                        catch (Exception e)
                        {
                            e.printStackTrace();
                        }
                        handler.sendEmptyMessage(0);}}.start();
                handler =new Handler() {
                    //当有消息发来的时候就执行Handler方法
                public void handleMessage(Message msg)
                {
                    super.handleMessage(msg);
                    info.setText(s);
                }
                };
            }
        });    
    }
}

服务器就填服务器的ip地址,如果服务器是在自己电脑上的,客户端在虚拟机上,那么服务器就填10.0.2.2,若是局域网连接的,就用在win+r >cmd>config查询一下电脑的ip;端口号必须与服务器一致,挑选的端口如果显示被占用就换一个,端口的取值就自行百度。

运行时先启动服务器,在运行客户端

运行效果:

客户端+服务器控制台

按钮点击前:

 

 

 

 点击后:

相关推荐

android下vulkan与opengles纹理互通

talkchan · 1158浏览 · 2020-11-23 10:37:39
Android 使用RecyclerView实现轮播图

奔跑的男人 · 2166浏览 · 2019-05-09 17:11:13
微软发布新命令行工具 Windows Terminal

吴振华 · 860浏览 · 2019-05-09 17:15:04
Facebook 停止屏蔽部分区块链广告

· 746浏览 · 2019-05-09 17:20:08
加载中

0评论

评论
分类专栏
小鸟云服务器
扫码进入手机网页