python搭建服务器实现两个Android客户端间收发消息
本文为大家分享了python搭建服务器实现两个Android客户端间收发消息,供大家参考,具体内容如下
python服务器
#coding:utf-8
importsocket
importthreading
importtime
defhandle_client(client_socket,client_id):
"""处理客户端请求"""
#获取客户端请求数据
whileTrue:
try:
request_data=client_socket.recv(1024)
exceptException:
time.sleep(0.2)
continue
iflen(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
whileTrue:
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
iflen(client_socket_list)==3:
client_socket_list.pop(0)
client_socket.setblocking(0)
handle_client_thread.start()
Android客户端-Java代码
packagecom.example.administrator.wuziqi_intenet;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.support.v7.app.AppCompatActivity;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.EditText;
importandroid.widget.TextView;
importandroid.widget.Toast;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
importjava.net.Socket;
importjava.net.URLDecoder;
importjava.net.UnknownHostException;
importstaticcom.example.administrator.wuziqi_intenet.R.id.button1;
publicclassMainActivityextendsAppCompatActivity{
Buttonbutton=null;
TextViewtextView=null;
EditTexteditText=null;
Socketsocket;
BufferedWriterpw=null;
BufferedReaderis=null;
Stringstring="baba";
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
newThread(){
@Override
publicvoidrun(){
try{
socket=newSocket("10.2.70.42",8000);
socket.setSoTimeout(10000);
pw=newBufferedWriter(newOutputStreamWriter(socket.getOutputStream()));
is=newBufferedReader(newInputStreamReader(socket.getInputStream()));
}catch(IOExceptione){
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(newView.OnClickListener(){
@Override
publicvoidonClick(Viewview){
newThread(){
@Override
publicvoidrun()
{
Stringmsg=editText.getText().toString();
try{
pw.write(msg);
pw.flush();
}catch(UnknownHostExceptione){
Toast.makeText(MainActivity.this,"失败1",Toast.LENGTH_SHORT).show();
e.printStackTrace();
}catch(IOExceptione){
Toast.makeText(MainActivity.this,"失败2",Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
}.start();
editText.setText("");
}
});
}
privateHandlerhandler=newHandler(){
publicvoidhandleMessage(Messagemessage){
try{
Moving();
}catch(IOExceptione){
e.printStackTrace();
}
}
};
privatevoidMoving()throwsIOException{
newThread(){
@Override
publicvoidrun(){
try{
if(is.ready())
string=is.readLine();
}catch(IOExceptione){
e.printStackTrace();
}
}
}.start();
byte[]b=string.getBytes();
Strings1=newString(b);
System.out.println(s1);
textView.setText(string);
handler.sendEmptyMessageDelayed(1,100);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。