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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章