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中optionParser模块的使用方法实例教程
Aug 29 Python
python中函数默认值使用注意点详解
Jun 01 Python
python数字图像处理实现直方图与均衡化
May 04 Python
python 制作自定义包并安装到系统目录的方法
Oct 27 Python
python爬虫获取小区经纬度以及结构化地址
Dec 30 Python
对python字典过滤条件的实例详解
Jan 22 Python
Python3最长回文子串算法示例
Mar 04 Python
pandas实现将dataframe满足某一条件的值选出
Jun 12 Python
python实现五子棋游戏
Jun 18 Python
基于python生成英文版词云图代码实例
May 16 Python
Python基于pandas绘制散点图矩阵代码实例
Jun 04 Python
Python如何设置指定窗口为前台活动窗口
Aug 12 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
用PHP实现WEB动态网页静态
2006/10/09 PHP
实现php加速的eAccelerator dll支持文件打包下载
2007/09/30 PHP
ThinkPHP模板自定义标签使用方法
2014/06/26 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
2009/04/10 Javascript
jquery tools之tabs 选项卡/页签
2009/07/25 Javascript
JQuery for与each性能比较分析
2013/05/14 Javascript
wap浏览自动跳转到wap页面的js代码
2014/05/17 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
javascript获取文档坐标和视口坐标
2015/05/26 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
2015/11/07 Javascript
javascript基础知识
2016/06/07 Javascript
js+css3制作时钟特效
2016/10/16 Javascript
基于angularJS的表单验证指令介绍
2016/10/21 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
webpack安装配置与常见使用过程详解(结合vue)
2020/06/01 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
JS实现拖动模糊框特效
2020/08/25 Javascript
python使用append合并两个数组的方法
2015/04/28 Python
Python定时执行之Timer用法示例
2015/05/27 Python
python是否适合网页编程详解
2019/10/04 Python
Pytorch to(device)用法
2020/01/08 Python
django 外键创建注意事项说明
2020/05/20 Python
Python数据可视化实现多种图例代码详解
2020/07/14 Python
精彩的推荐信范文
2013/11/26 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
人事任命书范文
2014/06/04 职场文书
质量安全标语
2014/06/07 职场文书
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
2015年政务公开工作总结
2015/05/19 职场文书