java学习之网络编程之echo程序
2016-01-23 23:39
453 查看
服务端的实现
客户端的实现
package com.gh.echo; import java.io.*; import java.net.*; /** * echo服务器程序 * 实现 不断接收字符串 ,然后返回一个echo+字符串 * 服务程序写成多线程 * @author ganhang * */ public class EchoServerDemo { public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(8000); System.out.println("服务器已启动。"); int i=1; while (true) { System.out.println("服务器正在等待连接..."); Socket s = ss.accept(); new Thread(new UserThread(s),"用户"+i++).start();//来一个用户启动一个线程 } } catch (IOException e) { e.printStackTrace(); } } } /** * 用户线程 * @author ganhang */ class UserThread implements Runnable{ private Socket s; public UserThread(Socket s) { this.s=s; } @Override public void run() { System.out.println(Thread.currentThread().getName()+"-已连接"); try{ BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream())); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); while(true){//循环读入知道读入bye String info=br.readLine();//因为是读一行所以客服端发送过来的字符串必须有"\n"换行符 System.out.println(info); if("".equals(info)||"bye".equals(info)){ break; }else{ bw.write("echo:你好"+Thread.currentThread().getName()+"\n");//客服端用的读一行所以这边末尾加换行符 bw.flush();//缓存流必须刷新 } } br.close(); bw.close(); }catch(IOException e){ e.printStackTrace(); } } }
客户端的实现
package com.gh.echo; 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.util.Scanner; /** * echo客户端 * 实现从控制台写字符串发送给服务器,接收服务器发回来的字符串 * @author ganhang * */ public class EchoClientDemo { public static void main(String[] args) { try { Socket sk=new Socket("",8000); System.out.println("与服务器连接成功。"); Scanner sc=new Scanner(System.in); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(sk.getOutputStream())); BufferedReader br=new BufferedReader(new InputStreamReader(sk.getInputStream())); while(true){ System.out.println("请输入文字:"); String info=sc.next(); if("bye".equals(info)){ break; }else{ bw.write(info+"\n"); bw.flush(); System.out.println(br.readLine()); } } bw.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- Android异步加载访问网络图片-解析json
- 深度学习中对神经网络的理解
- 深度|神经网络和深度学习简史(第一部分):从感知机到BP算法
- ZMQ源码分析(二)-- 网络&线程模型
- Visualizing and Understanding ConvNet论文心得
- System.Web.HttpCompileException (0x80004005): (0): error CS0016: 未能写入输出文件
- Neural Networks and Deep Learning学习笔记ch5 - 为什么深度神经网络很难训练?
- AngularJS中如何使用$http对MongoLab数据表进行增删改查
- AngularJS中使用$http对MongoLab数据表进行增删改查
- 关于cisco网络设备访问控制列表ACL中IN、OUT的理解
- 几种经典的网络服务器架构模型的分析与比较
- 扣丁学堂——双缓存实例(处理较大网络图片)
- linux基础网络设置
- XMPP介绍三:Socket
- 基于socket的TCP、UDP 编程(附带源代码)
- 网络基本功系列:概述
- tcpip转
- 利用NET HUNTER建立一个自动文件下载的网络接入点
- ASP.NET Core 1.0 部署 HTTPS
- 利用NET HUNTER建立一个自动文件下载的网络接入点