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 相关文章推荐
Django框架中render_to_response()函数的使用方法
Jul 16 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
Jul 18 Python
PyQt QCombobox设置行高的方法
Jun 20 Python
python 反编译exe文件为py文件的实例代码
Jun 27 Python
python使用socket实现的传输demo示例【基于TCP协议】
Sep 24 Python
Python操作Sonqube API获取检测结果并打印过程解析
Nov 27 Python
浅谈Python线程的同步互斥与死锁
Mar 22 Python
Python中使用filter过滤列表的一个小技巧分享
May 02 Python
基于Keras中Conv1D和Conv2D的区别说明
Jun 19 Python
python 列表推导和生成器表达式的使用
Feb 01 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
Jun 05 Python
使用Python拟合函数曲线
Apr 14 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
最贵的咖啡是怎么产生的,它的风味怎么样?
2021/03/04 新手入门
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
PHP基于swoole多进程操作示例
2019/08/12 PHP
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
php 中序列化和json使用介绍
2013/07/08 Javascript
extjs render 用法介绍
2013/09/11 Javascript
使用js的replace()方法查找字符示例代码
2013/10/28 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
JS(JQuery)操作Array的相关方法介绍
2014/02/11 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
webpack 2的react开发配置实例代码
2017/07/28 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
jQuery 淡入/淡出效果函数用法分析
2020/05/19 jQuery
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
Python创建字典的八种方式
2019/02/27 Python
python os模块简单应用示例
2019/05/23 Python
numpy.transpose()实现数组的转置例子
2019/12/02 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
CSS3中Color的一些特性介绍
2012/05/27 HTML / CSS
使用canvas绘制超炫时钟
2014/12/17 HTML / CSS
StubHub希腊:购买体育赛事、音乐会和剧院门票
2019/08/03 全球购物
五好党支部事迹材料
2014/02/06 职场文书
医德医风演讲稿
2014/05/20 职场文书
产品调价通知函
2015/04/20 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
Python打包为exe详细教程
2021/05/18 Python
pytorch 实现在测试的时候启用dropout
2021/05/27 Python
Python实现滑雪小游戏
2021/09/25 Python