python搭建服务器实现两个Android客户端间收发消息


Posted in Python onApril 12, 2018

本文为大家分享了python搭建服务器实现两个Android客户端间收发消息,供大家参考,具体内容如下

python服务器

# coding:utf-8

import socket
import threading
import time


def handle_client(client_socket, client_id):
  """处理客户端请求"""
  # 获取客户端请求数据

  while True:
    try:
      request_data = client_socket.recv(1024)
    except Exception:
      time.sleep(0.2)
      continue
    if len(request_data) > 0:
      request_lines = request_data.splitlines()
      print(request_lines[0].decode("utf-8"))
      #res = int(request_lines[0]) + 1
      client_socket_list[(client_id+1) % 2].send(bytes(str(request_lines[0].decode("utf-8"))+"\n", "utf-8"))
  client_socket_list.remove(client_id)



if __name__ == "__main__":
  server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  """
  socket()是一个函数,创建一个套接字,
  AF_INET 表示用IPV4地址族,
  SOCK_STREAM 是说是要是用流式套接字
  """
  # server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 设置地址重用
  server_socket.bind(("10.2.70.42", 8000)) # 绑定端口
  server_socket.listen(2) # 开启监听
  client_socket_list = []
  client_num = 0
  Isready = False

  while True:
    client_id = client_num
    client_socket, client_address = server_socket.accept()
    print("[%s, %s]用户连接上了" % client_address)
    handle_client_thread = threading.Thread(target=handle_client, args=(client_socket, client_id))
    """
    tartget表示这个进程到底要执行什么行为
    args是target要接受的参数
    """
    client_socket_list.append(client_socket)
    client_num += 1
    if len(client_socket_list) == 3:
      client_socket_list.pop(0)
    client_socket.setblocking(0)
    handle_client_thread.start()

Android客户端-Java代码

package com.example.administrator.wuziqi_intenet;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.URLDecoder;
import java.net.UnknownHostException;

import static com.example.administrator.wuziqi_intenet.R.id.button1;

public class MainActivity extends AppCompatActivity {

  Button button = null;
  TextView textView = null;
  EditText editText = null;
  Socket socket;
  BufferedWriter pw=null;
  BufferedReader is=null;
  String string="baba";
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    new Thread() {
      @Override
      public void run() {
          try{
            socket = new Socket("10.2.70.42", 8000);
            socket.setSoTimeout(10000);
            pw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
          } catch (IOException e) {
            e.printStackTrace();
          }

        }
      }.start();

    button = (Button) findViewById(button1);
    textView = (TextView) findViewById(R.id.textview);
    editText = (EditText) findViewById(R.id.input);

    handler.sendEmptyMessageDelayed(1, 100);

    button.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        new Thread(){
          @Override
          public void run()
          {
            String msg = editText.getText().toString();
            try{
              pw.write(msg);
              pw.flush();
            } catch (UnknownHostException e) {
              Toast.makeText(MainActivity.this,"失败1",Toast.LENGTH_SHORT).show();
              e.printStackTrace();
            } catch (IOException e) {
              Toast.makeText(MainActivity.this,"失败2",Toast.LENGTH_SHORT).show();
              e.printStackTrace();
            }
          }
        }.start();
        editText.setText("");
      }
    });

  }
  private Handler handler = new Handler() {

    public void handleMessage(Message message) {
      try {
        Moving();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }

  };
  private void Moving() throws IOException {
    new Thread() {
      @Override
      public void run() {
        try {
          if (is.ready())
            string = is.readLine();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }.start();
    byte[] b=string.getBytes();
    String s1=new String(b);
    System.out.println(s1);
    textView.setText(string);
    handler.sendEmptyMessageDelayed(1, 100);
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python获取糗百图片代码实例
Dec 18 Python
Python3基础之基本数据类型概述
Aug 13 Python
利用Python绘制MySQL数据图实现数据可视化
Mar 30 Python
详解在Python和IPython中使用Docker
Apr 28 Python
python训练数据时打乱训练数据与标签的两种方法小结
Nov 08 Python
对Python函数设计规范详解
Jul 19 Python
python mysql断开重连的实现方法
Jul 26 Python
python3 mmh3安装及使用方法
Oct 09 Python
基于python监控程序是否关闭
Jan 14 Python
python网络编程:socketserver的基本使用方法实例分析
Apr 09 Python
Pytorch数据拼接与拆分操作实现图解
Apr 30 Python
Pyside2中嵌入Matplotlib的绘图的实现
Feb 22 Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 #Python
Python实现简单http服务器
Apr 12 #Python
Python实现一个服务器监听多个客户端请求
Apr 12 #Python
python使用socket创建tcp服务器和客户端
Apr 12 #Python
Python简单实现两个任意字符串乘积的方法示例
Apr 12 #Python
Java与Python两大幸存者谁更胜一筹呢
Apr 12 #Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 #Python
You might like
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
PHP 数组基础知识小结
2010/08/20 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
PHP whois查询类定义与用法示例
2019/04/03 PHP
jquery tools 系列 scrollable学习
2009/09/06 Javascript
javascript复制对象使用说明
2011/06/28 Javascript
javascript采用数组实现tab菜单切换效果
2012/12/12 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
Python中计算三角函数之cos()方法的使用简介
2015/05/15 Python
Python使用pickle模块储存对象操作示例
2018/08/15 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
使用python实现对元素的长截图功能
2019/11/14 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
Python猫眼电影最近上映的电影票房信息
2020/09/18 Python
婚礼证婚人证婚词
2014/01/08 职场文书
总账会计岗位职责
2014/03/13 职场文书
转让协议书范本
2014/09/13 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
给老婆的道歉信
2015/01/20 职场文书
离婚协议书的范本
2015/01/27 职场文书
实名检举信范文
2015/03/02 职场文书
房贷工资证明范本
2015/06/12 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
导游词之日本富士山
2020/01/06 职场文书
MySQL去除密码登录告警的方法
2022/04/20 MySQL