TCP实现ECHO程序(服务端同时处理多个客户端的响应)

一、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();

}

}

发布了163 篇原创文章 · 获赞 18 · 访问量 10万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章