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 04 Python
python实现将内容分行输出
Nov 05 Python
如何在python字符串中输入纯粹的{}
Aug 22 Python
python调用支付宝支付接口流程
Aug 15 Python
python多线程分块读取文件
Aug 29 Python
Python基于pygame实现单机版五子棋对战
Dec 26 Python
pytorch获取模型某一层参数名及参数值方式
Dec 30 Python
python字符串替换re.sub()实例解析
Feb 09 Python
pycharm设置当前工作目录的操作(working directory)
Feb 14 Python
Python通过getattr函数获取对象的属性值
Oct 16 Python
python中reload重载实例用法
Dec 15 Python
python实现简单聊天功能
Jul 07 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采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
js代码实现微博导航栏
2015/07/30 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
JavaScipt基本教程之JavaScript语言的基础
2008/01/16 Javascript
javascipt基础内容--需要注意的细节
2013/04/10 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
express文件上传中间件Multer详解
2016/10/24 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
Python unittest模块用法实例分析
2018/05/25 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
pytorch中的卷积和池化计算方式详解
2020/01/03 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
python怎么判断素数
2020/07/01 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
python tqdm实现进度条的示例代码
2020/11/10 Python
python 实现波浪滤镜特效
2020/12/02 Python
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
html5利用canvas实现颜色容差抠图功能
2019/12/23 HTML / CSS
PHP如何调用MYSQL存储过程
2014/05/30 面试题
中式婚礼主持词
2014/03/13 职场文书
婚礼答谢宴主持词
2014/03/14 职场文书
3的组成教学反思
2014/04/30 职场文书
文明寝室申报材料
2014/05/12 职场文书
乳制品整治工作方案
2014/05/29 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python