Android Socket编程-简单的网络聊天程序.doc_第1页
Android Socket编程-简单的网络聊天程序.doc_第2页
Android Socket编程-简单的网络聊天程序.doc_第3页
Android Socket编程-简单的网络聊天程序.doc_第4页
Android Socket编程-简单的网络聊天程序.doc_第5页
已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论