版权声明:LemonSnm https://blog.csdn.net/LemonSnm/article/details/90143070
Echo,意为应答
程序的功能:
客户端向服务器发送一个字符串,服务器不做任何处理,直接把字符串返回给客户端,
Echo程序是最为基本的客户/服务器程序。
代码示例;
服务器:
package com.lemon;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务器:
*
*/
public class EchoServerDemo {
public static void main(String[] args) {
//创建一个服务器端的Socket(1024-65535)
try {
ServerSocket server = new ServerSocket(6666);
System.out.println("服务器开启,等待客户端连接...");
//接受客户端的Socket //没有数据 阻塞在这
Socket socket = server.accept();
System.out.println("客户端连接成功!");
//创建输入字符缓冲流
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//通过输入流 读取网络数据
String info = br.readLine(); //如果没有数据 造成阻塞
System.out.println(info);
//获取输出流,向客户端返回消息
PrintStream ps = new PrintStream(new BufferedOutputStream(socket.getOutputStream()));
ps.println("each:"+ info);
//刷新
ps.flush();
//关闭
ps.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端:
package com.lemon;
import java.io.*;
import java.net.Socket;
/**
* 客户端:
*
* @author lemonsun
*/
public class EchoClientDemo {
public static void main(String[] args) {
try {
//创建一个Socket对象 指定要连接的服务器:IP+端口号
Socket socket = new Socket("localhost",6666);
//获取Socket的输出输入流
PrintStream ps = new PrintStream(new BufferedOutputStream(socket.getOutputStream()));
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//写数据
ps.println("hello,这里是客户端发送的信息");
ps.flush();//刷新
//读取服务器返回的信息
String info = br.readLine();
System.out.println("服务器返回的信息:" + info);
ps.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
先启动服务器程序,再启动客户端程序
前两句对Socket的操作 后面都是对I/O流的操作