服务器端:
import java.net.*;
import java.io.*;
//import java.io.BufferedReader;
//import java.io.InputStreamReader;
//import java.io.PrintStream;
//import java.net.ServerSocket;
//import java.net.Socket;
class EchoThread implements Runnable { //实现Runnable接口
private Socket client = null; //接受客户端
public EchoThread(Socket client) { //通过构造方法设置Socket
this.client = client;
}
@Override
public void run() { //覆写ran()方法
PrintStream out = null;//定义输出流
BufferedReader buf = null;//用于接受客户端发送来的信息
try {
buf = new BufferedReader(
new InputStreamReader(
client.getInputStream()//得到客户端的输入信息
)
);
out = new PrintStream(client.getOutputStream());//实例化客户端的输出流
boolean flag = true;//标志位,表示一个客户端是否操作完毕
while (flag) {//客户端循环操作
String str = buf.readLine();//在此处不断的接受信息
if (str == null || "".equals(str)) { //判断输入的信息是否为空
flag = false;//客户端操作结束
} else {
if ("bye".equals(str)) {//如果输入信息为“bye”表示结束
flag = false; //客户端操作结束
} else {
out.println("ECHO : " + str);//向客户端回显信息
//注意这里是out.println(),不是System.out.println()
}
}
}
out.close();//关闭输出流
client.close();//关闭客户端
} catch (Exception e) {
}
}
}
public class day01 {
public static void main(String[] args) throws Exception {//所有异常抛出
ServerSocket serve = null;//定义ServerSocket对象
Socket client = null;//定义Socket对象,表示客户端
serve = new ServerSocket(8888);//此服务器在8888端口上进行监听
boolean f = true;//定义一个标记位
while (f) {//无限制接收客户端连接
System.out.println("服务器运行,等待客户端连接");
client = serve.accept();//等待客户端连接
new Thread(new EchoThread(client)).start();//实例并启动线程
}
serve.close();//关闭服务器
}
};
客户端:
import java.net.*;
import java.io.*;
//import java.io.BufferedReader;
//import java.io.InputStreamReader;
//import java.io.PrintStream;
//import java.net.ServerSocket;
//import java.net.Socket;
public class day02 {
public static void main(String[] args) throws Exception {//所有异常抛出
Socket client = null;//声明Socket对象
client = new Socket("localhost", 8888);//指定连接主机及端口
BufferedReader buf = null;//接收服务器端发送回来的信息
PrintStream out = null;//输出流,向服务器端发送信息
BufferedReader input = null;//声明BufferedReader对象
input = new BufferedReader(new InputStreamReader(System.in));//从键盘接收数据
out = new PrintStream(client.getOutputStream());//向服务器端输出信息
buf = new BufferedReader(
new InputStreamReader(
client.getInputStream()//接收服务器端输入信息
)
);
boolean flag = true;//定义标志位
while (flag) {//不断发送和接收数据
System.out.print("请输入信息:");
String str = input.readLine();//从键盘接收数据
out.println(str);//向服务器端输
if ("bye".equals(str)) {//如果输入信息为“bye"表示结束
flag = false;//客户端操作结束
} else {
String echo = buf.readLine();//接收ECHO信息
System.out.println(echo);//输出ECHO信息
}
}
client.close();//关闭Socket
buf.close();//关闭输入流
}
}
运行
服务器端:
服务器运行,等待客户端连接
服务器运行,等待客户端连接
服务器运行,等待客户端连接
客户端1:
请输入信息:sfeshei
ECHO : sfeshei
请输入信息:4ei你好
ECHO : 4ei你好
请输入信息:
客户端2:
输入信息:fse
ECHO : fse
输入信息:无法sh
ECHO : 无法sh
输入信息: