一、ECHO意为应答,程序的功能是客户端向服务器发送一个字符串,服务器不做任何处理,直接把字符串返回给客户端,ECHO是自己笨的客户/服务器程序。
二、目前为止我们编写的程序中,服务器只能处理一个客户端的链接,要想服务器同时处理多个客户端的请求链接,就必须加入多线程的处理机制,将每一个客户端程序都创建一个新的线程对象。
服务端代码
package us.google.www;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class EchoServerDemo {
public static void main(String[] args) throws IOException {
//创建一个服务器端的socket
ServerSocket ss = new ServerSocket(8888);
System.out.println("服务器已启动。。。。");
boolean flag = true;
while (flag) {
System.out.println("正在等待连接");
Socket s = ss.accept();
new Thread(new UserThread(s)).start();
}
}
}
class UserThread implements Runnable
{
private Socket s ;
public UserThread(Socket s) {
super();
this.s = s;
}
@Override
public void run() {
System.out.println(s.getInetAddress().getHostAddress()+"已连接");
try {
//获取输出输出流
BufferedReader br = new BufferedReader(
new InputStreamReader(s.getInputStream()));
PrintStream ps = new PrintStream(
new BufferedOutputStream(s.getOutputStream()));
boolean bool = true;//循环接受数据
while (bool) {
String info= br.readLine();
if ("".equals(info)||"bye".equals(info)) {
bool = false;
}
else {
System.out.println(info);
ps.println("echo:"+info);
ps.flush();
}
}
ps.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端 代码
package us.google.www;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
* echo客户端程序
* @author chongrubujing
*
*/
public class EchoClientDemo {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket s = new Socket("192.168.0.51",8888);
System.out.println("与服务器连接成功!");
Scanner input = new Scanner(System.in);
boolean flag = true;
//获取输入输出流
BufferedReader br = new BufferedReader(
new InputStreamReader(s.getInputStream()));
PrintStream ps = new PrintStream(
new BufferedOutputStream(s.getOutputStream()));
while (flag) {
System.out.println("请输入:");
String info = input.nextLine();
if("bye".equals(info))
{
flag = false;
}
else {
ps.print(info);
ps.flush();
System.out.println(br.readLine());
}
}
ps.close();
br.close();
}
}