首页 > 编程 > Python > 正文

python搭建服务器实现两个Android客户端间收发消息

2019-11-25 14:56:35
字体:
来源:转载
供稿:网友

本文为大家分享了python搭建服务器实现两个Android客户端间收发消息,供大家参考,具体内容如下

python服务器

# coding:utf-8import socketimport threadingimport timedef 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);  }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表