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实现的HTTP并发测试完整示例
Apr 23 Python
python web框架学习笔记
May 03 Python
Python爬虫实现百度图片自动下载
Feb 04 Python
Python爬虫实现(伪)球迷速成
Jun 10 Python
用python实现将数组元素按从小到大的顺序排列方法
Jul 02 Python
Python处理session的方法整理
Aug 29 Python
python 实现turtle画图并导出图片格式的文件
Dec 07 Python
Python图像处理库PIL的ImageGrab模块介绍详解
Feb 26 Python
Python callable内置函数原理解析
Mar 05 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
Dec 17 Python
解决Tkinter中button按钮未按却主动执行command函数的问题
May 23 Python
Python安装使用Scrapy框架
Apr 12 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
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
2017/02/15 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
javascript 一个自定义长度的文本自动换行的函数
2007/08/19 Javascript
jquery 学习之二 属性 文本与值(text,val)
2010/11/25 Javascript
jQuery Ajax请求状态管理器打包
2012/05/03 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
jquery组件使用中遇到的问题整理及解决
2014/02/21 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
js仿新浪微博消息发布功能
2017/02/17 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
bootstrap table服务端实现分页效果
2017/08/10 Javascript
JavaScript实现简单图片轮播效果
2017/08/21 Javascript
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
原生js+ajax分页组件
2020/01/30 Javascript
JavaScript设计模式之策略模式实现原理详解
2020/05/29 Javascript
Vue实现计算器计算效果
2020/08/17 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
Python连接DB2数据库
2016/08/27 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
Python爬虫简单运用爬取代理IP的实现
2020/12/01 Python
详解FireFox下Canvas使用图像合成绘制SVG的Bug
2019/07/10 HTML / CSS
Carter’s OshKosh加拿大:购买婴幼儿服装和童装
2018/11/27 全球购物
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
海量信息软件测试笔试题
2015/08/08 面试题
教师实习期自我鉴定
2013/10/06 职场文书
服务员岗位责任制
2014/02/11 职场文书
2014年销售员工作总结
2014/12/01 职场文书
2015年四年级班主任工作总结
2015/10/22 职场文书
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS
利用Apache Common将java对象池化的问题
2022/06/16 Servers