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自然语言处理之词干,词形与最大匹配算法代码详解
Nov 16 Python
python3之模块psutil系统性能信息使用
May 30 Python
解决python "No module named pip" 的问题
Oct 13 Python
Python中xml和json格式相互转换操作示例
Dec 05 Python
详解如何设置Python环境变量?
May 13 Python
python实现动态数组的示例代码
Jul 15 Python
解决pandas展示数据输出时列名不能对齐的问题
Nov 18 Python
python科学计算之scipy——optimize用法
Nov 25 Python
tensorflow之读取jpg图像长和宽实例
Jun 18 Python
Python 实现一个简单的web服务器
Jan 03 Python
python使用pymysql模块操作MySQL
Jun 16 Python
Django + Taro 前后端分离项目实现企业微信登录功能
Apr 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中mysql_field_type()函数用法
2014/11/24 PHP
php判断访问IP的方法
2015/06/19 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
向左滚动文字 js代码效果
2013/08/17 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
JavaScript中的toLocaleDateString()方法使用简介
2015/06/12 Javascript
全面了解addEventListener和on的区别
2016/07/14 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
jquery-mobile基础属性与用法详解
2016/11/23 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
jquery实现下拉框左右选择功能
2017/02/21 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
vue将对象新增的属性添加到检测序列的方法
2018/02/24 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
详解JS函数防抖
2020/06/05 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
python爬取51job中hr的邮箱
2016/05/14 Python
Python爬取网易云音乐热门评论
2017/03/31 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
使用python编写udp协议的ping程序方法
2018/04/22 Python
Sanic框架蓝图用法实例分析
2018/07/17 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
一些Unix笔试题和面试题
2013/01/22 面试题
技术总监管理职责范本
2014/03/06 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
运动会通讯稿300字
2015/07/20 职场文书
导游词之山东八大关
2019/12/18 职场文书