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 相关文章推荐
py中的目录与文件判别代码
Jul 16 Python
python每隔N秒运行指定函数的方法
Mar 16 Python
Python3中常用的处理时间和实现定时任务的方法的介绍
Apr 07 Python
讲解Python中的标识运算符
May 14 Python
如何优雅地处理Django中的favicon.ico图标详解
Jul 05 Python
Django 多环境配置详解
May 14 Python
如何不用安装python就能在.NET里调用Python库
Jul 12 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
Mar 05 Python
Python读取VOC中的xml目标框实例
Mar 10 Python
Python 生成VOC格式的标签实例
Mar 10 Python
python 动态渲染 mysql 配置文件的示例
Nov 20 Python
python之随机数函数的实现示例
Dec 30 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 输出缓存详解
2009/06/20 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
由document.body和document.documentElement想到的
2009/04/13 Javascript
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
基于jquery的文字向上跑动类似跑马灯的效果
2014/09/22 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
javascript检测移动设备横竖屏
2016/05/21 Javascript
完美实现八种js焦点轮播图(下篇)
2020/04/20 Javascript
深入理解React高阶组件
2017/09/28 Javascript
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
解决angular双向绑定无效果,ng-model不能正常显示的问题
2018/10/02 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
快速解决vue2+vue-cli3项目ie兼容的问题
2020/11/17 Vue.js
基于Python实现一个简单的银行转账操作
2016/03/06 Python
实例讲解Python爬取网页数据
2018/07/08 Python
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
在python中将字符串转为json对象并取值的方法
2018/12/31 Python
Python实现简易过滤删除数字的方法小结
2019/01/09 Python
Django框架视图函数设计示例
2019/07/29 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
Jupyter打开图形界面并画出正弦函数图像实例
2020/04/24 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
Html5新增标签有哪些
2017/04/13 HTML / CSS
英国鞋网:Rubber Sole
2020/03/03 全球购物
美国狗旅行和户外用品领先供应商:kurgo
2020/08/18 全球购物
教师业务培训方案
2014/05/01 职场文书
自强之星事迹材料
2014/05/12 职场文书
投标承诺书怎么写
2014/05/24 职场文书
争先创优活动总结
2014/08/27 职场文书
2014校长四风问题对照检查材料思想汇报
2014/09/16 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
《平移和旋转》教学反思
2016/02/19 职场文书