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求pi的方法
Oct 08 Python
Python自动生产表情包
Mar 17 Python
python 第三方库的安装及pip的使用详解
May 11 Python
Python入门之后再看点什么好?
Mar 05 Python
TensorFlow入门使用 tf.train.Saver()保存模型
Apr 24 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
May 16 Python
使用python Telnet远程登录执行程序的方法
Jan 26 Python
python 求1-100之间的奇数或者偶数之和的实例
Jun 11 Python
Django的models中on_delete参数详解
Jul 16 Python
使用python批量修改文件名的方法(视频合并时)
Mar 24 Python
Django上线部署之IIS的配置方法
Aug 22 Python
最小二乘法及其python实现详解
Feb 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
有关phpmailer的详细介绍及使用方法
2013/01/28 PHP
解析左右值无限分类的实现算法
2013/06/20 PHP
PHP中基本HTTP认证技巧分析
2015/03/16 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
2017/04/01 PHP
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
AngularJS使用angular-formly进行表单验证
2015/12/27 Javascript
jQuery中的ready函数与window.onload谁先执行
2016/06/21 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
Vue-CLI 3.X 部署项目至生产服务器的方法
2019/03/22 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
Python爬虫包 BeautifulSoup  递归抓取实例详解
2017/01/28 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
Python selenium爬取微博数据代码实例
2020/05/22 Python
python 字符串的驻留机制及优缺点
2020/06/19 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
世界上最大的糖果店:Dylan’s Candy Bar
2017/11/07 全球购物
澳大利亚最受欢迎的超级商场每日优惠:Catch
2020/11/17 全球购物
某公司的.net工程师面试题笔试题
2013/11/22 面试题
体育老师的教学自我评价分享
2013/11/19 职场文书
上班打牌检讨书
2014/02/07 职场文书
数控技校生自我鉴定
2014/04/19 职场文书
禁毒宣传工作方案
2014/05/23 职场文书
项目转让协议书
2014/10/27 职场文书
自主招生自荐信怎么写
2015/03/24 职场文书
Python中使用ipython的详细教程
2021/06/22 Python
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
2022/06/14 MySQL