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 ...
随机推荐
- hdu 2203亲和串 (kmp)
#include<cstdio>#include<iostream>#include<cstring>#include<string>using nam ...
- yii教程
http://www.yiichina.com/doc 官网是很好的参考文档
- xbox360版本之分
2005-11-22 发售精简版 (Core):白色 / 无硬盘 / 主板代号 Xenon(现已停产) 2005-11-22 发售豪华版 (Premium):白色 / 20 GB 硬盘 / 主板代号 ...
- 帝国cms让当前栏目显示不同样式(图文)
在使用帝国cms制作栏目导航条时,我们可能会需要根据当前栏目,使当前栏目样式不同. 如图: 此类导航,源代码一般为 <li>全站首页</li> <li class=&qu ...
- DataTabe对象的例子
前: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DataTable对象 ...
- HDU 2215 Maple trees
增量法的最小包围圈算法,不会…… #include <cstdio> #include <cstring> #include <iostream> #include ...
- HDU 1090 A+B for Input-Output Practice (II)
#include <cstdio> int main() { int n,a,b; scanf("%d",&n); ; i<=n; i++) { scan ...
- swjtu 1962 A+B(模拟)
题目链接:http://acm.swjtu.edu.cn/JudgeOnline/showproblem?problem_id=1962 问题思路:考察编程基础的问题,涉及到字符串转为数字的问题. 代 ...
- squee_spoon and his Cube VI(贪心,找不含一组字符串的最大长度+kmp)
1818: squee_spoon and his Cube VI Time Limit: 1 Sec Memory Limit: 128 MB Submit: 77 Solved: 22Subm ...
- 提高你的Java代码质量吧:使用valueof前必须进行校验
一.分析 每个枚举都是java.lang.Enum的子类,都可以访问Enum类提供的方法,比如hashCode.name.valueOf等,其中valueOf方法会把一个String类型的名称转变成枚 ...