android python socket image

使用python代码编写服务端代码,使用Android、java语言进行图片发送 ,java对java的socket连接很容易,但是java和python之间的socket连接就蒙蔽了,记录一下。

package com.example.qing.socketsendimage;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class MainActivity extends AppCompatActivity {
    Button sendImage;
    ImageView imageview;
    public void sendTextMsg(DataOutputStream out, String msg) throws IOException {
        byte[] bytes = msg.getBytes();
        long len = bytes.length;
        //先发送长度,在发送内容
        out.writeLong(len);
        out.write(bytes);
    }
    public void sendImgMsg(DataOutputStream out ) throws IOException {
        //发送的图片为图标,就是安卓机器人,将bitmap转为字节数组
        Log.i("sendImgMsg", "len: "+"1");
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);

        Log.i("sendImgMsg", "len: "+"2");
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG,80,bout);
        //写入字节的长度,再写入图片的字节
        long len = bout.size();
        //这里打印一下发送的长度
        Log.i("sendImgMsg", "len: "+len);
        out.write(bout.toByteArray());
    }

    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sendImage=(Button)findViewById(R.id.buttonSend);
        imageview=(ImageView)findViewById(R.id.image1);
        sendImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread() {
                    Socket socket;
                    String host="192.168.91.1";
                    int post=8999;
                    public void run() {
                        try {
                            //建立连接
                            socket = new Socket(host, post);
                            //获取输出流,通过这个流发送消息
                            DataOutputStream out = new DataOutputStream(socket.getOutputStream());
                            //发送文字消息
//                          sendTextMsg(out,"来自手机客户端的消息");
                            sendImgMsg(out);
                            out.close();
                            socket.close();

                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    //启动线程
                }.start();



            }
        });

    }

}
import socketserver
import datetime
import base64
import numpy as np
import cv2

class MyTCPHandler(socketserver.BaseRequestHandler):

    def handle(self):
        print("get....")
        image1 = []
        try:
            while True:
                data=self.request.recv(1024) #拿到客户端发送的数据
                print('data,',data)
                # data = base64.b64decode(data)
                if not data or len(data) == 0:
                    break
                image1.extend(data)
            print("get over")
            image = np.asarray(bytearray(image1), dtype="uint8")
            # print("1", image)
            # print("2",len(image))  39559
            image = cv2.imdecode(image, cv2.IMREAD_COLOR)
            # cv2.imwrite("./tes4333.jpg", image)
            cv2.namedWindow("Image")
            cv2.imshow("Image", image)
            cv2.waitKey(0)
            cv2.destroyAllWindows()
            print("接收完成")
            self.request.sendall("get your connet!".encode("utf-8"))
        except Exception:
            print(self.client_address,"连接断开")
        finally:
            self.request.close()    #异常之后,关闭连接

    #before handle,连接建立:
    def setup(self):
        now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        print(now_time)
        print("连接建立:",self.client_address)

    # finish run  after handle
    def finish(self):
        print("释放连接")


if __name__=="__main__":
    HOST,PORT = "",8999
    # server=socketserver.TCPServer((HOST,PORT),MyTCPHandler)  #实例对象,传入参数

    # 多线程
    server = socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler)
    server.serve_forever()   #一直运行

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值