Android Socket编程简单的网络聊天程序.docx
- 文档编号:10903519
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:18
- 大小:123.06KB
Android Socket编程简单的网络聊天程序.docx
《Android Socket编程简单的网络聊天程序.docx》由会员分享,可在线阅读,更多相关《Android Socket编程简单的网络聊天程序.docx(18页珍藏版)》请在冰点文库上搜索。
AndroidSocket编程简单的网络聊天程序
1、实验名称:
AndroidSocket编程
(1)
简单的网络聊天程序
二、实验日期:
2014-09-16/2014-09-17
三、实验目的(实验题目):
1.使用Java语言编写一个简单的服务器,使用Java集合保存与服务器连接的多个客户端的Socket,当有客户端向服务器发送消息是,遍历该集合中的所有Socket对象,并向所有链接到服务器的客户端转发消息。
使用线程池技术处理客户消息。
2.编写一个Android客户端,用来实现与1.题的服务器进行通信,能够发送、接收聊天消息。
由于Android4.0以上的SDK要求不能再UI线程里做I/O、Socket连接等操作,需要进行特殊处理(处理方法见大课课件)。
分别采用2中方法处理Socket连接、I/O等操作。
使用Handler发送消息访问主线程里的UI组件。
参考界面:
参考布局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: text="你好: " 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="签名"/> 附: Socket连接的关键代码 (1)服务器端关键代码: 1)//建立Socket服务 ServerSocketserver=newServerSocket(18888); 2)//接收请求 socket=server.accept(); 3)//接收客户端消息 BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream())); Stringmessage=in.readLine(); 4)//发送消息,向客户端 PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true); out.println("Server: "+message); 5)//关闭流 in.close(); out.close(); (2)Android客户端关键代码: Socketsocket=null; Stringmessage=editText.getText().toString()+"\r\n"; socket=newSocket("10.0.2.2",18888); PrintWriterout= newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true); //发送数据 out.println(message); //接收数据 BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream())); Stringmsg=in.readLine(); editText.setText(msg); //关闭流 out.close(); in.close(); 四、实验用的仪器和材料: 1.PC机; 2.Widows操作系统 3.AdroidSDK,ADT,Eclipse开发环境 4.Network 5.Androidmobile 五、实验的步骤和方法(程序代码及、注释、说明): 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客户端; 布局文件 xmlversion="1.0"encoding="utf-8"? > android=" android: layout_width="fill_parent" android: layout_height="fill_parent" android: orientation="vertical">
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android Socket编程简单的网络聊天程序 Socket 编程 简单 网络 聊天 程序