已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 实验名称: Android Socket 编程(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文件:android:text=你好:附:Socket连接的关键代码(1)服务器端关键代码:1)/建立Socket服务ServerSocket server = new ServerSocket(18888); 2)/接收请求socket = server.accept();3)/接收客户端消息BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream();String message = in.readLine();4)/发送消息,向客户端PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),true);out.println(Server: + message);5)/关闭流in.close();out.close();(2)Android 客户端关键代码:Socket socket = null;String message = editText.getText().toString()+ rn ;socket = new Socket(,18888);PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter (socket.getOutputStream(),true);/发送数据out.println(message);/接收数据BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream();String msg = in.readLine();editText.setText(msg);/关闭流out.close();in.close();四、实验用的仪器和材料:1. PC机;2. Widows 操作系统3. Adroid SDK,ADT,Eclipse开发环境4. Network5. Android mobile 五、实验的步骤和方法(程序代码及、注释、说明): 1.服务器端代码:package ;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import .ServerSocket;import .Socket;import java.util.ArrayList;import java.util.List;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/* * Android 简易聊天室 (服务器端) * * info MyEclipse 右键运行 * info 命令行 cd 到文件路径(如:E:Androidclient2_13bin), 执行 java .Server * author mao 2012-6-20 上午10:40:19 */public class Server /* 端口 5000 */private static final int SERVERPORT = 5000;/* 所有已连接的客户端 */private static List clientList = new ArrayList();/* 线程缓存池 */private ExecutorService executorService;/* 服务器套接字 */private ServerSocket serverSocket;/* main函数 */public static void main(String args) new Server();public Server() try serverSocket = new ServerSocket(SERVERPORT);executorService = Executors.newCachedThreadPool();System.out.println(服务器已启动.);Socket client = null;while (true) / 等待客户消息client = serverSocket.accept();/ 保存每次的客户套接字clientList.add(client);/ 启动一个线程去处理客户消息executorService.execute(new ThreadServer(client); catch (IOException e) System.out.println(套接字异常!);e.printStackTrace();/* 消息处理线程 */static class ThreadServer implements Runnable private Socket socket;private BufferedReader br;private PrintWriter pw;private String msg;public ThreadServer(Socket socket) throws IOException this.socket = socket;/ 初始化输入流, 采用 UTF-8字符集br = new BufferedReader(new InputStreamReader(socket.getInputStream(), UTF-8);msg = 用户: + this.socket.getInetAddress() + 来啦 请求次数:+ clientList.size();sendMessage();/* 线程运行方法 */public void run() 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; else if (msg.trim().equals(clear) / 清空聊天记录msg = socket.getInetAddress() + :;sendMessage(); else if (!.equals(msg.trim() / 普通聊天消息msg = socket.getInetAddress() + : + msg;sendMessage(); catch (IOException e) e.printStackTrace();/* 向客户端回送消息 */private void sendMessage() throws IOException System.out.println(msg);for (Socket client : clientList) pw = new PrintWriter(client.getOutputStream(), true);pw.println(msg);2.Android客户端;布局文件 代码:package com.example.week03_1;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import .Socket;import android.annotation.TargetApi;import android.app.Activity;import android.os.Build;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.os.StrictMode;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;TargetApi(Build.VERSION_CODES.GINGERBREAD)public class ClientActivity extends Activity private final String DEBUG_TAG = Client;/* * 0 这个代表模拟器所在电脑的IP 5 */private static final String SERVERIP = 7;private static final int SERVERPORT = 5000;private Thread thread = null;private Socket socket = null;private Button login = null;private Button send = null;private EditText record = null;private EditText content = null;private Button clear = null;private Button author = null;private BufferedReader br = null;private PrintWriter pw = null;private String strMsg = ;private static final String AUTHOR = 小懒猫;public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_client);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);/ android4.0 UIStrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build();StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath().build();/ 登陆login.setOnClickListener(new OnClickListener() public void onClick(View v) try socket = new Socket(SERVERIP, SERVERPORT);/ 初始化输入流, 采用 UTF-8字符集br = new BufferedReader(new InputStreamReader(socket.getInputStream(), gb2312);pw = new PrintWriter(socket.getOutputStream(), true); catch (Exception e) Log.e(DEBUG_TAG, 登陆失败! + e.toString(););/ 发送send.setOnClickListener(new OnClickListener() public void onClick(View v) try String str = content.getText().toString() + n;pw.println(str);pw.flush(); catch (Exception e) Log.e(DEBUG_TAG, 发送失败! + e.toString(););/ 清除聊天记录clear.setOnClickListener(new OnClickListener() public void onClick(View v) try strMsg = ;pw.println(clear);pw.flush(); catch (Exception e) Log.e(DEBUG_TAG, 发送失败! + e.toString(););/ 签名author.setOnClickListener(new OnClickListener() public void onClick(View v) try pw.println(AUTHOR);pw.flush(); catch (Exception e) Log.e(DEBUG_TAG, 发送失败! + e.toString(););/ 启动 用于监听 服务器 消息的线程thread = new Thread(runnable);thread.start();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026摄影摄像行业市场供需分析及投资评估规划分析研究报告
- 2026南亚纺织服装业现状发展趋势与投资规划分析研究报告
- 2026长沙单招面试题及答案
- 2026年责任制整体护理培训课件
- 2026-2030全国及内蒙古煤炭行业供应前景及发展规划展望研究报告
- 2026-2030磷酸烷基酯行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 儿童超重肥胖防控防治指南解读 课件
- 2026年危急值报告制度培训课件
- 2026年中小学语文教师招聘考试试卷教学设计案例分析
- 2026年物流师仓储管理全真模拟试卷流程计算题专项训练
- 2025年重庆市江北区工会社会工作者公开招聘考试试题
- 《跨学科主题学习-我们玩过的游戏》教学设计-2025-2026学年鲁教版(2024)小学信息技术五年级上册
- 万豪培训考试题及答案
- 反假考试培训提纲
- SMETA确保员工合法工作权的核查程序-SEDEX验厂专用文件
- 2025年医院药事管理自查报告及整改措施
- 学校食堂管理课件
- 危险化学品经营事故应急预案
- 留学顾问培训课件下载
- DBJ04-T306-2025 建筑基坑工程技术标准
- T/CECS 10015-2019自粘丁基橡胶钢板止水带
评论
0/150
提交评论