Android 网络编程基础之简单聊天程序
前一篇讲了Android的网络编程基础,今天写了一个简单的聊天程序分享一下
首先是服务端代码:
package com.jiao.socketdemo; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket; public class ChatServer extends Thread {
private ServerSocket server = null;
private static final int PORT = 5550;
private BufferedWriter writer;
private BufferedReader reader; public ChatServer() throws IOException { CreateSocket();//初始化socket
} @Override
public void run() { Socket client;
String txt; try {
while (true) {
// 获取应答消息
client = ResponseSocket();
while (true) {
// 接受客户端信息
txt = ReceiveMsg(client); System.out.println("客户端发来的消息:" + txt); SendMsg(client, txt); if (true)
break;
}
CloseSocket(client);
}
} catch (Exception e) {
// TODO: handle exception
} } //关闭连接
private void CloseSocket(Socket client) throws IOException {
reader.close();
writer.close();
client.close(); } //封装发送消息的方法
private void SendMsg(Socket socket, String Msg) throws IOException {
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.write(Msg + "\n");
writer.flush();
} //封装接受消息的方法
private String ReceiveMsg(Socket socket) throws IOException {
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String txt = reader.readLine();
return txt;
} //接受消息
private Socket ResponseSocket() throws IOException {
Socket client = server.accept();
return client;
} //初始化socket
private void CreateSocket() throws IOException {
server = new ServerSocket(PORT, 100);
} }
启动服务端的代码如下:
// 创建聊天服务器
ChatServer chatserver = new ChatServer();
// 检测服务器是否已经启动,如果没有则启动服务器
if (chatserver != null) {
chatserver.start();
}
以下是客户端的代码:
package com.example.socketclient; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle; public class MainActivity extends Activity {
public static int SERVER_PORT = 5550; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); new Thread() {
public void run() {
message();
}
}.start();
} private void message() {
try {
Socket client = RequestSocket("这里是服务器的IP", SERVER_PORT);
SendMsg(client, "client send");
String txt = ReceiveMsg(client);
System.out.println("服务端返回数据:" + txt);
} catch (Exception e) { }
}; // 客户端获取消息类
private Socket RequestSocket(String host, int port)throws UnknownHostException, IOException {
Socket socket = new Socket(host, port);
return socket;
} // 客户端发送消息类
private void SendMsg(Socket socket, String msg) throws IOException {
// 将要发送的消息写入Buffer 中
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// 格式转换
writer.write(msg.replace("\n", " ") + "\n");
// 刷新,发送
writer.flush();
} // 客户端接收消息
private String ReceiveMsg(Socket socket) throws IOException {
// 写入读Buffer 中// 获取接收的消息到数据流中
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 读取消息到字符串中
String Msg = reader.readLine();
// 以字符串的方式返回消息
return Msg;
} }
Android 网络编程基础之简单聊天程序的更多相关文章
- Android网络编程基础
Android网络编程只TCP通信 TCP 服务器端工作的主要步骤如下.步骤1 调用ServerSocket(int port)创建一个ServerSocket,并绑定到指定端口上.步骤2 调用acc ...
- 网络编程(UDP协议-聊天程序)
网络编程中的UDP协议中聊天程序,发送端口,和接受端口. 发送端口(Send): <span style="font-size:18px;">package cn.it ...
- 网络编程_UDP协议_聊天程序
发送端:(将数据源改为键盘录入) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStre ...
- iOS开发网络篇—网络编程基础
iOS开发网络篇—网络编程基础 一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过 ...
- Android网络编程系列 一 TCP/IP协议族
在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...
- Android网络编程系列 一 Socket抽象层
在<Android网络编程>系列文章中,前面已经将Java的通信底层大致的描述了,在我们了解了TCP/IP通信族架构及其原理,接下来我们就开始来了解基于tcp/ip协议层的Socket抽 ...
- C#网络编程基础知识
C#网络编程基础知识一 1.IPAddress类 用于表示一个IP地址.IPAddress默认构造函数 public IPAddress(long address);一般不用 其中Parse()方法最 ...
- Android网络编程概述
Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包 ...
- Android网络编程要学的东西与Http协议学习
本节引言: 本节开始我们来学习Android网络编程相关的一些东西:Android端网络编程是要干嘛?http协议的学习,使用自带扣脚Json解析类解析Json,XML解析常用的几种方式,HttpUr ...
随机推荐
- http协议客户端向服务器端请求时一般需要发送的内容
out.println("GET /shopping/index.html HTTP/1.1");//请求行 包括请求方式,文件路径, http协议版本(必写)请求头.... ou ...
- 利用react native创建一个天气APP
我们将构建一个实列程序:天气App,(你可以在react native 中创建一个天气应用项目),我们将学习使用并结合可定义模板(stylesheets).盒式布局(flexbox).网络通信.用户输 ...
- Socket.IO – 基于 WebSocket 构建跨浏览器的实时应用
Socket.IO 是一个功能非常强大的框架,能够帮助你构建基于 WebSocket 的跨浏览器的实时应用.支持主流浏览器,多种平台,多种传输模式,还可以集合 Exppress 框架构建各种功能复杂 ...
- TypeWonder – 在任何网站上实时预览字体效果
TypeWonder 让网页字体的选择过程变得轻松愉快.它可以帮助您在任何网站上快速测试 Web 字体效果!输入网站网址,就能够即时预览的字体的实际效果,还可以从数百种字体中进行挑选,您还可以得到所需 ...
- [python]自问自答:python -m参数?
python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...
- Android学习笔记之横向二级菜单实现
PS:元旦来一发. 学习内容: 1.Android二级横向菜单的实现过程.效果如上图... 这种横向的二级菜单在很多的app都有所应用.效果看起来还是非常的美观的.也算是项目需要,自己也就学了一下 ...
- python内置模块(1)
Python的模块在其它语言中通常称为库或类库,也就是lib.它是编程语言的第三级封装,第四级则是包,也就是模块的打包组合,而前两级分别是函数和类.封装的好处,自然不用多言,高内聚,松耦合,减少代码重 ...
- [Latex]生成Vertical Timeline
Vertical TimeLine 用Latex生成一个竖直的VerticalTimeline的想法来源于今天翻看王老师的教师寄语,有感于学院走过的操作系统实验的艰辛之路,遂产生了写一个"小 ...
- 关于Form.Close跟Form.Dispose
我们在Winform开发的时候,使用From.Show来显示窗口,使用Form.Close来关闭窗口.熟悉Winform开发的想必对这些非常熟悉.但是Form类型实现了IDisposable接口,那我 ...
- thread_CyclicBarrier回环栅栏
CyclicBarrier回环栅栏,字面意思是可循环使用(Cyclic)的屏障(Barrier).通过它可以实现让一组线程等待至某个状态之后再全部同时执行. 它要做的事情是,让一组线程到达一个屏障(也 ...