java学习之网络编程之echo程序
服务端的实现
- 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();
- }
- }
- }
java学习之网络编程之echo程序的更多相关文章
- 7.3(java学习笔记)网络编程之UDP
一.UDP UDP的全称是User Datagram Protocol(用户数据报协议),是一种无连接的不安全的传输协议, 传输数据时发送方和接收方无需建立连接,所以是不安全的. 发送时不建立连接直接 ...
- java 26 - 8 网络编程之 TCP协议上传图片
上次的是上传TXT文件,这次上传的是图片.同样,上传成功需要反馈给客户端. 区别: TXT文件用记事本打开,我们可以看得懂,所以用了缓冲字符流,对通道内的字节流进行包装了. 而图片用记事本打开,我们看 ...
- java 26 - 6 网络编程之 TCP协议 传输思路 以及 代码
TCP传输 Socket和ServerSocket 建立客户端和服务器 建立连接后,通过Socket中的IO流进行数据的传输 关闭socket 同样,客户端与服务器是两个独立的应用程序 TCP协议发送 ...
- java 26 - 9 网络编程之 TCP协议多用户上传文件
TCP实现多用户上传文件: 需要同时给多用户上传文件,这样就得用多线程来实现. 实际上,这样的话,上传的先后顺序和速度就跟客户端的带宽有关:带宽够,就容易抢占到线程的执行权: 首先,创建个线程类:(这 ...
- java 26 - 8 网络编程之 TCP协议的练习
TCP练习: 1.客户端键盘录入,服务器输出文本文件 客户端代码: public class ClientDemo { public static void main(String[] args) t ...
- java 25 - 4 网络编程之 UDP协议传输思路
UDP传输 两个类:DatagramSocket与DatagramPacket(具体看API) A:建立发送端,接收端. B:建立数据包. C:调用Socket的发送接收方法. D:关闭Socket. ...
- java 25 - 3 网络编程之 Socket套接字
Socket Socket套接字: 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字. Socket原理机制: 通信的两端都有Socket. 网络通信其实就是Socket ...
- java 26 - 7 网络编程之 TCP协议代码优化
上次所写的代码中,客户端和服务器端所进行的数据传输所用的是字节流. 优化: A:这次,为了高效,对这个字节流通过转换流来进行包装,包装成高效字符流. B:这次,传输的数据是通过键盘录入的数据. 服务器 ...
- java 25 - 4 网络编程之 UDP协议传输的代码优化
UDP协议的输出端: /* UDP发送数据: A:创建Socket发送端对象 B:创建数据报包(把数据打包) C:调用Socket对象发送数据报包 D:释放资源(底层是IO流) */ public c ...
随机推荐
- poj 2480 (欧拉函数应用)
点击打开链接 //求SUM(gcd(i,n), 1<=i<=n) /* g(n)=gcd(i,n),根据积性定义g(mn)=g(m)*g(n)(gcd(m,n)==1) 所以gcd(i,n ...
- JAVA处理XML
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName>< ...
- Filter 字符编码Filter 一
使用字符编码Filter package com.helloweenvsfei.filter; import java.io.IOException; import javax.servlet.Fil ...
- c++ primer plus 习题答案(6)
p425.1 #include<iostream> #include<cstring> #include<cstdlib> using namespace std; ...
- MVC数据提交
关于请求方式(form表单) .form的几个属性 <form name="input" action="http://www.baidu.com" me ...
- servlet三种实现方式之三通过继承HttpServlet开发servlet
servlet有三种实现方式: 1.实现servlet接口 2.继承GenericServlet 3.通过继承HttpServlet开发servlet 第三种: import java.io.*; i ...
- 【LeetCode题意分析&解答】33. Search in Rotated Sorted Array
Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...
- Protel99se教程七:创建PCB元件封装
在上一节课当中,我们给大家讲解了如何制作SCH原理图的元件库,这一节课,我们给大家讲解的是如何制作protel99se封装,在我们制作好元件好,需要制作对应的封装库,以供PCB设计所用. 第一步:进入 ...
- oracle命令大全
内容包括三大项: 1.oracle基本操作语句 2.SQLServer基本操作语句 3.各种数据库连接方法 ******************************************* ...
- HDU 2147 kiki's game
题解:画图可得当横纵坐标均为奇数时为必败态…… #include <cstdio> int main(){ int a,b; while(scanf("%d%d",&a ...