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爬虫数据处理(详解)
Jun 10 Python
numpy中以文本的方式存储以及读取数据方法
Jun 04 Python
Python设计模式之职责链模式原理与用法实例分析
Jan 11 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
Dec 05 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
python计算二维矩形IOU实例
Jan 18 Python
为什么说python适合写爬虫
Jun 11 Python
基于Python爬取京东双十一商品价格曲线
Oct 23 Python
paramiko使用tail实时获取服务器的日志输出详解
Dec 06 Python
python matlab库简单用法讲解
Dec 31 Python
python基础之文件操作
Oct 24 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抽象工厂模式(Elgg)
2010/03/21 PHP
PHP无刷新上传文件实现代码
2011/09/19 PHP
教你如何用php实现LOL数据远程获取
2014/06/10 PHP
php中数据库连接方式pdo和mysqli对比分析
2015/02/25 PHP
javascript appendChild,innerHTML,join性能比较代码
2009/08/29 Javascript
用js实现trim()的解决办法
2013/04/16 Javascript
jquery制作图片时钟特效
2020/03/30 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
简单了解JavaScript操作XPath的一些基本方法
2016/06/03 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
Bootstrop实现多级下拉菜单功能
2016/11/24 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
nodejs中函数的调用实例详解
2018/10/31 NodeJs
大转盘抽奖小程序版 转盘抽奖网页版
2020/04/16 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
Python实现的下载8000首儿歌的代码分享
2014/11/21 Python
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
python使用Matplotlib画条形图
2020/03/25 Python
Python安装selenium包详细过程
2019/07/23 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
Python利用matplotlib绘制约数个数统计图示例
2019/11/26 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
测控技术与仪器个人求职信范文
2013/12/30 职场文书
大专生毕业的自我评价
2014/02/06 职场文书
《小小竹排画中游》教学反思
2014/02/26 职场文书
2014年元旦感言
2014/03/06 职场文书
工程承包协议书范本
2014/09/29 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
答谢词范文
2015/01/05 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书