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处理文本文件并生成指定格式的文件
Jul 31 Python
理解python中生成器用法
Dec 20 Python
Python分支结构(switch)操作简介
Jan 17 Python
Django使用paginator插件实现翻页功能的实例
Oct 24 Python
python实现指定字符串补全空格、前面填充0的方法
Nov 16 Python
使用Python开发SQLite代理服务器的方法
Dec 07 Python
对python制作自己的数据集实例讲解
Dec 12 Python
python通过txt文件批量安装依赖包的实现步骤
Aug 13 Python
Python pandas库中的isnull()详解
Dec 26 Python
Pytorch之Variable的用法
Dec 31 Python
python读取yaml文件后修改写入本地实例
Apr 27 Python
python 实现两个npy档案合并
Jul 01 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/05/07 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
js导航菜单(自写)简单大方
2013/03/28 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
js 数组去重的四种实用方法
2014/09/09 Javascript
jquery得到iframe src属性值的方法
2014/09/25 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
AngularJS中下拉框的高级用法示例
2017/10/11 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
p5.js临摹动态图形实现方法详解
2019/10/23 Javascript
python自动安装pip
2014/04/24 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
python smtplib发送带附件邮件小程序
2018/05/22 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
Python3.7+tkinter实现查询界面功能
2019/12/24 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
Python中的Cookie模块如何使用
2020/06/04 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
html5+svg学习指南之SVG基础知识
2014/12/17 HTML / CSS
自我推荐书
2013/12/04 职场文书
高三地理教学反思
2014/01/11 职场文书
学校节能减排方案
2014/06/13 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
答辩状格式范本
2015/05/22 职场文书
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电
详解Java实践之抽象工厂模式
2021/06/18 Java/Android