Java网络编程-TCP程序设计:服务端和客户端

服务器端:

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
输入信息:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值