Android 简易聊天室作业.docx
- 文档编号:10172582
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:13
- 大小:166.96KB
Android 简易聊天室作业.docx
《Android 简易聊天室作业.docx》由会员分享,可在线阅读,更多相关《Android 简易聊天室作业.docx(13页珍藏版)》请在冰豆网上搜索。
Android简易聊天室作业
Android简易聊天室作业
(Android学龄小于3个月的,请在大人的陪同下观看)
大纲:
1.服务器端代码
2.Android主Activity代码
3.主布局文件main.xml代码
4.清单文件AndroidManifest.xml
5.效果
1.服务器端代码
package;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.PrintWriter;
import.ServerSocket;
import.Socket;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.concurrent.ExecutorService;
importjava.util.concurrent.Executors;
/**
*Android简易聊天室(服务器端)
*@infoMyEclipse右键运行
*@info命令行cd到文件路径(如:
E:
\Android\client2_13\bin\),执行java.Server
*@authormao2012-6-20上午10:
40:
19
*/
publicclassServer{
/**
*端口5000
*/
privatestaticfinalintSERVERPORT=5000;
/**
*所有已连接的客户端
*/
privatestaticList
/**
*线程缓存池
*/
privateExecutorServiceexecutorService;
/**
*服务器套接字
*/
privateServerSocketserverSocket;
/**
*main函数
*/
publicstaticvoidmain(String[]args){
newServer();
}
publicServer(){
try{
serverSocket=newServerSocket(SERVERPORT);
executorService=Executors.newCachedThreadPool();
System.out.println("服务器已启动...");
Socketclient=null;
while(true){
//等待客户消息
client=serverSocket.accept();
//保存每次的客户套接字
clientList.add(client);
//启动一个线程去处理客户消息
executorService.execute(newThreadServer(client));
}
}catch(IOExceptione){
System.out.println("套接字异常!
");
e.printStackTrace();
}
}
/**
*消息处理线程
*/
staticclassThreadServerimplementsRunnable{
privateSocketsocket;
privateBufferedReaderbr;
privatePrintWriterpw;
privateStringmsg;
publicThreadServer(Socketsocket)throwsIOException{
this.socket=socket;
//初始化输入流,采用UTF-8字符集
br=newBufferedReader(newInputStreamReader(socket.getInputStream(),"UTF-8"));
msg="用户:
"+this.socket.getInetAddress()+"来啦~请求次数:
"+clientList.size();
sendMessage();
}
/**
*线程运行方法
*/
publicvoidrun(){
try{
while((msg=br.readLine())!
=null){
if(msg.trim().equals("exit")){//退出
clientList.remove(socket);
br.close();
pw.close();
msg="用户:
"+this.socket.getInetAddress()+"退出.请求次数:
"+clientList.size();
socket.close();
sendMessage();
break;
}elseif(msg.trim().equals("clear")){//清空聊天记录
msg=socket.getInetAddress()+":
";
sendMessage();
}elseif(!
"".equals(msg.trim())){//普通聊天消息
msg=socket.getInetAddress()+":
"+msg;
sendMessage();
}
}
}catch(IOExceptione){
e.printStackTrace();
}
}
/**
*向客户端回送消息
*/
privatevoidsendMessage()throwsIOException{
System.out.println(msg);
for(Socketclient:
clientList){
pw=newPrintWriter(client.getOutputStream(),true);
pw.println(msg);
}
}
}
}
2.Android主Activity代码
package;
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
importjava.io.PrintWriter;
import.Socket;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.util.Log;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.EditText;
publicclassClientActivityextendsActivity{
privatefinalStringDEBUG_TAG="Client";
/**
*123.82.50.70
*127.0.0.1
*10.0.2.2这个代表模拟器所在电脑的IP
*10.0.2.15
*/
privatestaticfinalStringSERVERIP="10.0.2.2";
privatestaticfinalintSERVERPORT=5000;
privateThreadthread=null;
privateSocketsocket=null;
privateButtonlogin=null;
privateButtonsend=null;
privateEditTextrecord=null;
privateEditTextcontent=null;
privateButtonclear=null;
privateButtonauthor=null;
privateBufferedReaderbr=null;
privatePrintWriterpw=null;
privateStringstrMsg="";
privatestaticfinalStringAUTHOR="小懒猫~";
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
login=(Button)findViewById(R.id.login);
send=(Button)findViewById(R.id.send);
clear=(Button)findViewById(R.id.clear);
author=(Button)findViewById(R.id.author);
record=(EditText)findViewById(R.id.record);
content=(EditText)findViewById(R.id.content);
//登陆
login.setOnClickListener(newOnClickListener(){
publicvoidonClick(Viewv){
try{
socket=newSocket(SERVERIP,SERVERPORT);
//初始化输入流,采用UTF-8字符集
br=newBufferedReader(newInputStreamReader(socket.getInputStream(),"UTF-8"));
pw=newPrintWriter(socket.getOutputStream(),true);
}catch(Exceptione){
Log.e(DEBUG_TAG,"登陆失败!
"+e.toString());
}
}
});
//发送
send.setOnClickListener(newOnClickListener(){
publicvoidonClick(Viewv){
try{
Stringstr=content.getText().toString()+"\n";
pw.println(str);
pw.flush();
}catch(Exceptione){
Log.e(DEBUG_TAG,"发送失败!
"+e.toString());
}
}
});
//清除聊天记录
clear.setOnClickListener(newOnClickListener(){
publicvoidonClick(Viewv){
try{
strMsg="";
pw.println("clear");
pw.flush();
}catch(Exceptione){
Log.e(DEBUG_TAG,"发送失败!
"+e.toString());
}
}
});
//签名
author.setOnClickListener(newOnClickListener(){
publicvoidonClick(Viewv){
try{
pw.println(AUTHOR);
pw.flush();
}catch(Exceptione){
Log.e(DEBUG_TAG,"发送失败!
"+e.toString());
}
}
});
//启动用于监听服务器消息的线程
thread=newThread(runnable);
thread.start();
}
/**
*监听服务器消息的线程
*/
privateRunnablerunnable=newRunnable(){
publicvoidrun(){
while(true){
if(br==null){
try{
Thread.sleep(1000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
}else{
StringtempStr=null;
try{
if((tempStr=br.readLine())!
=null&&!
"".equals(tempStr)){
strMsg+=tempStr+"\n";
handler.sendMessage(handler.obtainMessage());
}
}catch(Exceptione){
Log.e(DEBUG_TAG,"Runnable异常"+e.toString());
}
}
}
}
};
Handlerhandler=newHandler(){
publicvoidhandleMessage(Messagemsg){
super.handleMessage(msg);
try{
//record.append(strMsg);
record.setText(strMsg);
}catch(Exceptione){
Log.e(DEBUG_TAG,"Handler异常"+e.toString());
}
}
};
}
3.主布局文件main.xml代码
xmlversion="1.0"encoding="utf-8"?
>
android=" android: orientation="vertical"android: layout_width="fill_parent" android: layout_height="fill_parent"> id="@+id/login" android: layout_width="wrap_content" android: layout_height="wrap_content" android: text="登陆"/> id="@+id/record" android: layout_width="fill_parent" android: layout_height="wrap_content"/> id="@+id/content" android: layout_width="fill_parent" android: layout_height="wrap_content"/> android: orientation="horizontal" android: layout_width="fill_parent" android: layout_height="wrap_content"> id="@+id/send" android: layout_width="90dip" android: layout_height="wrap_content" android: text="发送"/> id="@+id/clear" android: layout_width="140dip" android: layout_height="wrap_content" android: text="清空聊天记录"/> id="@+id/author" android: layout_width="90dip" android: layout_height="wrap_content" android: text="签名"/> 4.清单文件AndroidManifest.xml xmlversion="1.0"encoding="utf-8"? > android=" package="" android: versionCode="1" android: versionName="1.0"> icon="@drawable/icon"android: label="@string/app_name"> name=".ClientActivity" android: label="@string/app_name"> name="android.intent.action.MAIN"/> name="android.intent.category.LAUNCHER"/> minSdkVersion="8"/> name="android.permission.INTERNET"/> 5.效果 不会启动服务器,就不用看了,去问会的吧~嘿嘿~
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 简易聊天室作业 简易 聊天室 作业