Android 网络编程基础之简单聊天程序

前一篇讲了Android的网络编程基础,今天写了一个简单的聊天程序分享一下

首先是服务端代码:

 1 package com.jiao.socketdemo;
 2
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.IOException;
 6 import java.io.InputStreamReader;
 7 import java.io.OutputStreamWriter;
 8 import java.net.ServerSocket;
 9 import java.net.Socket;
10
11 public class ChatServer extends Thread {
12     private ServerSocket server = null;
13     private static final int PORT = 5550;
14     private BufferedWriter writer;
15     private BufferedReader reader;
16
17     public ChatServer() throws IOException {
18
19         CreateSocket();//初始化socket
20     }
21
22     @Override
23     public void run() {
24
25         Socket client;
26         String txt;
27
28         try {
29             while (true) {
30                 // 获取应答消息
31                 client = ResponseSocket();
32                 while (true) {
33                     // 接受客户端信息
34                     txt = ReceiveMsg(client);
35
36                     System.out.println("客户端发来的消息:" + txt);
37
38                     SendMsg(client, txt);
39
40                     if (true)
41                         break;
42                 }
43                 CloseSocket(client);
44             }
45         } catch (Exception e) {
46             // TODO: handle exception
47         }
48
49     }
50
51     //关闭连接
52     private void CloseSocket(Socket client) throws IOException {
53         reader.close();
54         writer.close();
55         client.close();
56
57     }
58
59     //封装发送消息的方法
60     private void SendMsg(Socket socket, String Msg) throws IOException {
61         writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
62         writer.write(Msg + "\n");
63         writer.flush();
64     }
65
66     //封装接受消息的方法
67     private String ReceiveMsg(Socket socket) throws IOException {
68         reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
69         String txt = reader.readLine();
70         return txt;
71     }
72
73     //接受消息
74     private Socket ResponseSocket() throws IOException {
75         Socket client = server.accept();
76         return client;
77     }
78
79     //初始化socket
80     private void CreateSocket() throws IOException {
81         server = new ServerSocket(PORT, 100);
82     }
83
84 }

启动服务端的代码如下:

1 // 创建聊天服务器
2         ChatServer chatserver = new ChatServer();
3         // 检测服务器是否已经启动,如果没有则启动服务器
4         if (chatserver != null) {
5             chatserver.start();
6         }

以下是客户端的代码:

 1 package com.example.socketclient;
 2
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.IOException;
 6 import java.io.InputStreamReader;
 7 import java.io.OutputStreamWriter;
 8 import java.net.Socket;
 9 import java.net.UnknownHostException;
10 import android.app.Activity;
11 import android.os.Bundle;
12
13 public class MainActivity extends Activity {
14     public static int SERVER_PORT = 5550;
15
16     @Override
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20
21         new Thread() {
22             public void run() {
23                 message();
24             }
25         }.start();
26     }
27
28     private void message() {
29         try {
30             Socket client = RequestSocket("这里是服务器的IP", SERVER_PORT);
31             SendMsg(client, "client send");
32             String txt = ReceiveMsg(client);
33             System.out.println("服务端返回数据:" + txt);
34         } catch (Exception e) {
35
36         }
37     };
38
39     // 客户端获取消息类
40     private Socket RequestSocket(String host, int port)throws UnknownHostException, IOException {
41         Socket socket = new Socket(host, port);
42         return socket;
43     }
44
45     // 客户端发送消息类
46     private void SendMsg(Socket socket, String msg) throws IOException {
47         // 将要发送的消息写入Buffer 中
48         BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
49         // 格式转换
50         writer.write(msg.replace("\n", " ") + "\n");
51         // 刷新,发送
52         writer.flush();
53     }
54
55     // 客户端接收消息
56     private String ReceiveMsg(Socket socket) throws IOException {
57         // 写入读Buffer 中// 获取接收的消息到数据流中
58         BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
59         // 读取消息到字符串中
60         String Msg = reader.readLine();
61         // 以字符串的方式返回消息
62         return Msg;
63     }
64
65 }
时间: 2024-12-25 19:34:10

Android 网络编程基础之简单聊天程序的相关文章

Android网络编程基础

Android网络编程只TCP通信 TCP 服务器端工作的主要步骤如下.步骤1 调用ServerSocket(int port)创建一个ServerSocket,并绑定到指定端口上.步骤2 调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字.步骤3 调用Socket 类的getOutputStream() 和getInputStream() 获取输出和输入流,开始网络数据的发送和接收.步骤4 关闭通信套接字. 服务器端: 1 package com.jiao.so

Android网络编程(一)---Socket基础

Socket通常称为""套接字.Socket字面上的中文意思为"插座".一台服务器可能会提供很多服务,每种服务对应一个Socket,而客户的"插头"也是一个Socket.Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.Socket把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议.Socket用于描述IP地址和端口,是一个通信链的句柄.应

Java网络编程基础(六)— 基于TCP的NIO简单聊天系统

在Java网络编程基础(四)中提到了基于Socket的TCP/IP简单聊天系统实现了一个多客户端之间护法消息的简单聊天系统.其服务端采用了多线程来处理多个客户端的消息发送,并转发给目的用户.但是由于它是基于Socket的,因此是阻塞的. 本节我们将通过SocketChannel和ServerSocketChannel来实现同样的功能. 1.客户端输入消息的格式 username:msg    username表示要发送的的用户名,msg为发送内容,以冒号分割 2.实现思路 实现思路与Java网络

iOS开发网络篇—网络编程基础

iOS开发网络篇—网络编程基础 一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过网络跟外界进行数据交互.数据更新,应用才能保持新鲜.活力 (3)如果没有了网络,也就缺少了数据变化,无论外观多么华丽,终将变成一潭死水 移动网络应用 = 良好的UI + 良好的用户体验 + 实时更新的数据 新闻:网易新闻.新浪新闻.搜狐新闻.腾讯新闻 视频:优酷.百度视频.搜狐视频.爱奇艺视频 音乐

Android网络编程网上文章总结

关于网络编程,网上也有许多好的文章,这里我就选了几篇觉得不错的归纳到了一起,仅供参考 Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包套接字(socket).Internet协议.常见Http处理等.比如:创建URL,以及URLConnection/HttpURLConnection对象.设置链接参数.链接到服务器.向服务器写数据.从服务器读取数

Android网络编程系列 一 TCP/IP协议族

在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必要进一步的了解,这就要我们了解网络通信层了,提到网络通信层不得不说起ISO-OSI的七层协议经典架构,如图所示: 上图的左边部分就是osi架构模型了, ISO/OSI模型,即开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标

Android网络编程系列 一 Socket抽象层

在<Android网络编程>系列文章中,前面已经将Java的通信底层大致的描述了,在我们了解了TCP/IP通信族架构及其原理,接下来我们就开始来了解基于tcp/ip协议层的Socket抽象层.本篇文章将会让我们清楚的了解和学会使用Socket. 什么是Socket?它又是如何运作的?它的表现形式是什么?等等这些问题,本篇文章将逐步的揭晓. 一. 什么是Socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,你可以借助它建立TCP连接等等,而http是个应用层的

iOS网络编程开发—网络编程基础

iOS网络编程开发—网络编程基础 一.网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过网络跟外界进行数据交互.数据更新,应用才能保持新鲜.活力 (3)如果没有了网络,也就缺少了数据变化,无论外观多么华丽,终将变成一潭死水 移动网络应用 = 良好的UI + 良好的用户体验 + 实时更新的数据 新闻:网易新闻.新浪新闻.搜狐新闻.腾讯新闻 视频:优酷.百度视频.搜狐视频.爱奇艺视频 音乐:QQ音乐

漫谈Android网络编程

Android从业者,十之八九都是在做网络应用,不是互联网也是局域网.如今在4G和Wifi的天下下,流量什么的都已是浮云,单机应用的市场已然悄悄的一去不复返了.所以呢,不了解网络请求的同学要小心了,当心被时代的大浪一个浪头排在沙滩上. Android实现网络编程有HTTP.也有Socket.HTTP协议是应用层协议,主要解决如何包装数据,网络应用都会用到的协议:Socket是TCP/IP协议的封装,主要解决数据如何在网络中传输,常用于与服务器保持长连接,一般用于广告推送.实时聊天.在线游戏等.