client -- server发送过程中,涉及的输入流输出流:

 
需要注意的是:先运行服务器端,再进行客户端。
 
 http://blog.csdn.net/qq7342272/article/details/9698413  (值得推荐的好文)
 
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发送和接收的更多相关文章

  1. android开发,socket发送文件,read阻塞,得不到文件尾-1

    这是我的接收文件代码:开始可以读取到-1,但是现在又读取不到了,所以才加上红色字解决的(注释的代码) File file = new File(mfilePath,"chetou." ...

  2. Android开发学习之路--网络编程之xml、json

    一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载 ...

  3. Android开发学习路线的七个阶段和步骤

    Android开发学习路线的七个阶段和步骤           Android学习参考路线     第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和St ...

  4. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  5. Android开发学习路线图

    Android开发学习方法: Android是一个比较庞大的体系,从底层的Linux内核到上层的应用层,各部分的内容跨度也比较大.因此,一个好的学习方法对我们学习Android开发很重要. 在此建议, ...

  6. android开发学习笔记000

    使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...

  7. Android开发学习总结(一)——搭建最新版本的Android开发环境

    Android开发学习总结(一)——搭建最新版本的Android开发环境(转) 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是 ...

  8. Android开发学习之LauncherActivity开发启动的列表

    Android开发学习之LauncherActivity开发启动的列表 创建项目:OtherActivity 项目运行结果:   建立主Activity:OtherActivity.java [jav ...

  9. 最实用的Android开发学习路线分享

    Android开发学习路线分享.Android发展主导移动互联发展进程,在热门行业来说,Android开发堪称火爆,但是,虽然Android有着自身种种优势,但对开发者的专业性要求也是极高,这种要求随 ...

随机推荐

  1. ZrcListView

    https://github.com/zarics/ZrcListView

  2. eclipse中导入其它的webproject遇到和解决的问题

    注:下面为我从网上搜来的方法.经使用及学习后整理. 学习javaweb有段时间了.对于导入新项目.遇到好多问题.但终于成功了. 错误1:string cannot be resolved to a t ...

  3. 十分简洁的手机浏览器 lydiabox

    没有地址栏,没有工具栏.web app无需下载.无需安装.无需更新,加入即用:再也不用记住网址.更不用输入网址--一款这样极简极方便的浏览器,你想要吗? 我们做了一个十分简洁的手机浏览器,这个浏览器也 ...

  4. Flex+Java+Blazeds

    1.环境:jdk1.6,Flex4.6 2.工具:MyEclipse10 3.server:Tomcat7 4.连接方式:Blazeds 5.项目类型:Flex项目 6.步骤 (1)新建Flex项目一 ...

  5. Gson转换Json串为对象报java.lang.NoClassDefFoundError

    解决方法: 1.右键项目 ---> properties ----> java buildpath ---> order and export 2. 勾选 gson-x.x.x.ja ...

  6. myecplise、ecplise项目空间优化

    1.代码自动提示补全 Window->preferences->Java->Editor->Content Assist 再右下角Auto activation trigger ...

  7. 图片懒加载和UA池,UA代理池

    1,动态数据加载的处理 图片懒加载概念: 图片懒加载是一种页面优化技术.图片作为一种网络资源,在被请求时也与静态资源一样,将占用网络资源,而一次性将整个页面的所有图片加载完,将大大增加页面首屏加载时间 ...

  8. HDU 2512 一卡通大冒险(dp)

    一卡通大冒险 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  9. CentOS7.2 设置GRUB2引导界面分辨率

    最近在学习OS引导启动,GRUB2的学习材料也不少,主要还看官方手册清晰些. 公司里办公机的多启动用的ubuntu的界面,还挺炫酷的.之前看其他博客网文里看到可以设置grub2的分辨率,我拿CentO ...

  10. YTU 1006: Hero In Maze

    1006: Hero In Maze 时间限制: 1000 Sec  内存限制: 64 MB 提交: 72  解决: 22 题目描述 500年前,Jesse是我国最卓越的剑客.他英俊潇洒,而且机智过人 ...