由于在实验室做项目的需要,参考了博客上的各种代码,然后自己写写改改搞了十几天,今天终于有点模样了,然后分享出来也算是笔记又可以给后面的兄弟分享经验。(可能一时间不会太完善我会一直修改完善,后面工程会分享到我的GitHub,毕竟现在的博客会员太贵)

还是先上代码吧。不过我做的是android作为服务器端(接收显示图像),PC端作为客户端(发送图像)。

1、android服务器端(开发平台是androidstudio):

①权限设置。socket通信是TCP/IP方式,相当于局域网,必须获取网络权限

②部分关键代码。关键代码就是一个线程,因为通信的连接是阻塞机制(开始我也不懂,后来一想也挺简单的,你android端是服务器端,就像你想从别人那儿通过电话得到你中了大奖的消息,此刻别人还没打来电话你就只能坐着干等,一直等就形成了阻塞,等到别人打来电话,电话响了你接通电话就建立了通信。如果主线程也来这样等的话就是让大老板等手下浪费资源,就派一个小弟去等就行了于是建立一个子线程去等),子线程程序(绿色为关键代码,而且服务器端代码和客户端代码颜色对应):

public class SocketServerPictureThread extends Thread {    public String Length;   //用来放客户端发过来图像的长度    private Socket socket;      private int offset=0;       private BufferedOutputStream output;    //输出流    private BufferedInputStream input;      //输入流    @Override    public void run() {        try {            ServerSocket serverSocket = new ServerSocket(9000);  //服务器端端口,数据就是在这个端口上            while (true) {                socket = serverSocket.accept();                  //他就是阻塞,没电话来就一直等,下面都执行不了                                                                 //电话一来就建立连接,开始执行下面代码                output=new BufferedOutputStream(socket.getOutputStream());                input=new BufferedInputStream(socket.getInputStream());                Length=readMsgFromSocket(input);                //对面发来了图像大小,我好准备空间                send_msg.post(new Runnable() {                    @Override                    public void run() {                        send_msg.setText(Length);              //这是为了看到图像大小,线程中必须这样才能显示到UI界面                    }                });                                                        SendMsg("123");                                //随便发送的,让对面知道我收到了长度                byte[] bitmapBuff=new byte[Integer.valueOf(Length)];      //分配放图片的空间                while (offset

2、PC客户端(pycharm平台):

①客户端就简单了,前面不是在等消息嘛,我这边只要给他打电话就行,他那边可能等得有点久了,直接全部代码:

# -*- coding: utf-8 -*-import _threadimport socketimport osdef server_picture_socket():       picture_number = 1         //第几张图像    current_picture_dir = os.path.dirname(os.path.abspath(__file__))    //读取图像的文件地址    while True:        client_address = ('127.0.0.1', 5000)        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)   //这个就是“拨打电话”了        client_socket.connect(client_address)        print("准备发送")        if picture_number>3://我一共连续传了3张图,如果多来个几百张就是视频了            picture_number=1        server_picture_path = os.path.join(current_picture_dir, str(picture_number) + ".jpg")        print(server_picture_path)        while os.path.exists(server_picture_path):            server_picture_open = open(server_picture_path, 'rb')            file_size = os.stat(server_picture_path).st_size            x = str(file_size)            client_socket.send(x.encode("UTF-8"))                         //接通了电话,告诉服务器端你可能要接收                                                                                                                                           //                                                   的图像大小,让他可以分配放图像空间的大小了,为我准备好包间            eee= client_socket.recv(1024).decode()           //晓得服务器端接收到了长度            length = 0            while length != file_size:                pictrue_data = server_picture_open.read(1024)                client_socket.sendall(pictrue_data)                       //发送图像数据给服务器端                length += len(pictrue_data)            server_picture_open.close()            picture_number += 1            re = client_socket.recv(1024).decode()                        //对面发过来消息他已经接收完图像            client_socket.close()                             //接收完了呀,你挂了我也挂吧,还有消息就再给你打电话了            break        print("发送完毕")if __name__ == '__main__':    server_picture_socket()

3、通过USB是android的一个adb,所以要配置端口和adb环境的添加:

环境添加就先在androidstudio的setting中找到SDK文件地址,里面有个adb文件,再在环境变量中添加就行:可百度;

cmd键入 adb 出现该图就添加好了,然后就是端口的匹配:

接着键入 adb forward tcp:5000 tcp:9000 (端口程序中有)

啊,写了接近2个小时,毕竟我的水平有限,不然的话我两天就搞定这个垃圾程序了

后面传到github上,目前觉得有用的可以直接联系我发工程

 

更多相关文章

  1. android一键分享功能不使用任何第三方sdk
  2. Android上超级好用的前端调试方法(adb reverse)
  3. Android设计模式 观察者模式之eventbus
  4. android 如何绕过签名校验
  5. Android上实现仿IOS弹性ListView
  6. android上传文件至服务器(android端+服务器端)
  7. 第1个Android应用程序 Android制作简单单页导航
  8. Android的NoVIP视频解析APP开发完整过程
  9. 挖掘更合适的MVP模式的架构设计

随机推荐

  1. Android控件及API说明(三)
  2. android 瀑布流简单例子
  3. Android中如何收听特定应用安装成功的广
  4. Android——GridView(网格视图)相关知识总
  5. Good Site
  6. android 布局边框
  7. 升级到Android(安卓)Studio 3.0出现 aapt
  8. android 布局简括
  9. ProgressBar属性小结(转载)
  10. Android(安卓)异步加载图片