android tcp通信传输图片,【图片】Android基于TCP协议的Socket通信简单实例【广信it学院吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

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;端口号必须与服务器一致,挑选的端口如果显示被占用就换一个,端口的取值就自行百度。

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

运行效果:

客户端+服务器控制台

按钮点击前:

f652d207e86f321e4161accedbc8c728.png

a47da861155c5e3f43a39bf89662f1ef.png

点击后:

cf86b2bf713188f63e35f0aaf0e5ac39.png

162a502d0fd1eafef8d444213df6074c.png


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部