android开发学习——Socket发送和接收
client -- server发送过程中,涉及的输入流输出流:
public class SocketServer { public static void main(String[] args) {
SocketServer socketServer = new SocketServer();
socketServer.startServer();
} public void startServer() {
ServerSocket serverSocket = null;
Socket socket = null;
try {
//1.建立一个服务器端,绑定指定端口
serverSocket = new ServerSocket(9898);
System.out.println("server started..");
while (true) {
//2.等待客户端的连接。如果有客户端接入,则执行下面的代码;没有客户端接入,在这里阻塞。
socket = serverSocket.accept();
// 如果有客户端接入,在此方法执行客户端和服务器数据传输的操作。
manageConnection(socket);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} public void manageConnection(final Socket socket) {
new Thread(new Runnable() {
@Override
public void run() {
BufferedReader reader = null;
BufferedWriter writer =null;
try {
System.out.println("client " + socket.hashCode() + " connedted");
//3.从网络->内存 in 获得输入流
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//3.从内存->网络 out 获得输出流
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String receivedMsg;
//4.得到客户端发来的消息
while ((receivedMsg = reader.readLine()) != null) {
System.out.println("client " + socket.hashCode() + ": " + receivedMsg);
//4.向客户端写出消息
writer.write("server reply: " + receivedMsg + "\n");
writer.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//5.关闭资源
try {
reader.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
} }
public class SocketClient { public static void main(String[] args) {
SocketClient client = new SocketClient();
client.start();
} public void start() {
BufferedReader inputReader = null;
BufferedReader reader = null;
BufferedWriter writer = null;
Socket socket = null;
try {
//1.建立客户端socket连接,指定服务器位置及端口
socket = new Socket("127.0.0.1", 9898);
//2.从网络->内存 in
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//2.从内存->网络 out
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
inputReader = new BufferedReader(new InputStreamReader(System.in));
startServerReplyListener(reader);
String inputContent;
int count = 0;
while (!(inputContent = inputReader.readLine()).equals("bye")) {
//3.向客户端发送消息
writer.write(inputContent);
if (count % 2 ==0) {
writer.write("\n");
}
count++;
writer.flush();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//4.关闭资源
try {
reader.close();
writer.close();
inputReader.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} public void startServerReplyListener(final BufferedReader reader) {
new Thread(new Runnable() {
@Override
public void run() {
try {
String response;
//3.得到客户端发来的消息
while ((response = reader.readLine()) != null) {
System.out.println(response);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
} }
android开发学习——Socket发送和接收的更多相关文章
- android开发,socket发送文件,read阻塞,得不到文件尾-1
这是我的接收文件代码:开始可以读取到-1,但是现在又读取不到了,所以才加上红色字解决的(注释的代码) File file = new File(mfilePath,"chetou." ...
- Android开发学习之路--网络编程之xml、json
一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载 ...
- Android开发学习路线的七个阶段和步骤
Android开发学习路线的七个阶段和步骤 Android学习参考路线 第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和St ...
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- Android开发学习路线图
Android开发学习方法: Android是一个比较庞大的体系,从底层的Linux内核到上层的应用层,各部分的内容跨度也比较大.因此,一个好的学习方法对我们学习Android开发很重要. 在此建议, ...
- android开发学习笔记000
使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...
- Android开发学习总结(一)——搭建最新版本的Android开发环境
Android开发学习总结(一)——搭建最新版本的Android开发环境(转) 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是 ...
- Android开发学习之LauncherActivity开发启动的列表
Android开发学习之LauncherActivity开发启动的列表 创建项目:OtherActivity 项目运行结果: 建立主Activity:OtherActivity.java [jav ...
- 最实用的Android开发学习路线分享
Android开发学习路线分享.Android发展主导移动互联发展进程,在热门行业来说,Android开发堪称火爆,但是,虽然Android有着自身种种优势,但对开发者的专业性要求也是极高,这种要求随 ...
随机推荐
- phpexcel不能输出中文
问题描写叙述:在使用phpexcel时,假设在单元格中填充中文内容,会导致输出单元格为空的情况,甚至连中文的字符(?!等)都无法识别. 产生原因:从网上查是utf-8的问题 解决方法:能够用iconv ...
- CodeForces - 344D Alternating Current (模拟题)
id=46667" style="color:blue; text-decoration:none">CodeForces - 344D id=46667" ...
- Windows server 2003 + IIS6 搭建Asp.net MVC执行环境
安装.Net Framework4.0. 下载地址: http://www.microsoft.com/zh-cn/download/details.aspx?id=17718 安装WindowsS ...
- js调试记录,将客户的调试信息保存到服务器端的一个小方法。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- IDEA失效的解决办法
1.根据下图进行操作即可解决
- 命题作文:在一棵IPv4地址树中彻底理解IP路由表的各种查找过程
这是一篇命题作文.近期一直想写点东西,但一直找不到题目.正好收到一封邮件,有人问我Linux路由表的布局问题以及路由缓存的问题,加之前些日子又帮人做了一个片上路由表,所以认为这是个好题目,索性花了多半 ...
- android 之EditText输入检測
近期开发一个功能的时候发生一个故事,其情节例如以下: 功能事实上不复杂,当中须要一个EditText来获取用户输入的信息.于是,我做了一个Dialog来显示我的输入界面(代码例如以下): mAlert ...
- PyTorch 60 分钟入门教程:数据并行处理
可选择:数据并行处理(文末有完整代码下载) 作者:Sung Kim 和 Jenny Kang 在这个教程中,我们将学习如何用 DataParallel 来使用多 GPU. 通过 PyTorch 使用多 ...
- Pulse-code modulation
脉冲编码调制(Pulse Code Modulation,PCM),由A.里弗斯于1937年提出的,这一概念为数字通信奠定了基础,60年代它开始应用于市内电话网以扩充容量,使已有音频电缆的大部分芯线的 ...
- What Is the Linux Lokkit Utility? https://www.lifewire.com/what-is-lokkit-2192255
lokkit: The Lokkit utility attempts to provide firewalling for the average Linux end user. Instead o ...