TCP通信程序的练习6

TCP通信程序的练习6

  • 客户端:数据来自文本文件,接受服务器反馈
    ClientDemo类(客户端)
package Demo;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/*

TCP通信程序的练习
    练习6:
    客户端:数据来自文本文件,接受服务器反馈
    服务器:接收的数据写入文本文件,给出反馈,代码用线程进行封装,为每一个客户端开启一个线程
 */
public class ClientDemo {
    public static void main(String[] args) throws IOException {
        //建立客户端
        Socket sgs = new Socket(InetAddress.getByName("sgs").getHostAddress(), 1110);
        BufferedReader br = new BufferedReader(new FileReader("C:\\LianXi\\java.txt"));

        //获取输出流,写数据,采取字符缓冲流(一次写入一行),接受服务器反馈
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sgs.getOutputStream()));

        String line, line2;
        while ((line = br.readLine()) != null) {
            bw.write(line);
            bw.newLine();
            bw.flush();

        }

        //void shutdownOutput(); 禁用此套接字的输出流。
        sgs.shutdownOutput();


        //给出反馈信息
        BufferedReader br1 = new BufferedReader(new InputStreamReader(sgs.getInputStream()));

        //给出反馈信息
        while (((line2 = br1.readLine()) != null)) {
            System.out.println("服务器" + line2);

        }

            //释放资源
            sgs.close();
        }
}

ServerDemo类(服务器)

package Demo;


import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
class SocketImp implements Runnable {
    private Socket sgs;

    //实施上锁
    private Object obj = new Object();

    public SocketImp(Socket sgs) {
        this.sgs = sgs;
    }

    @Override
    public void run() {
        BufferedReader br = null;
        BufferedWriter bw = null;
        synchronized (obj) {
            try {        //获取输入流,读数据,并写入文本文件中
                br = new BufferedReader(new InputStreamReader(sgs.getInputStream()));

                bw = new BufferedWriter(new FileWriter("c:\\Lianxi\\javaCopy.txt"));


                int count = 0;//定义一个跳数器
                File file = new File("C:\\LianXi\\javaCopy.txt");
                while (file.exists()) {//如果存在该文件,那我就利用跳数变一次
                    count++;
                    file = new File("C:\\LianXi\\javaCopy(" + count + ").txt");
                }

                //每次都会封装一个新的文件然后录入数据
                bw = new BufferedWriter(new FileWriter(file));

                String line;
                while ((line = br.readLine()) != null) {//等待发送的数据
                    bw.write(line);
                    bw.newLine();
                    bw.flush();
                }


                //给客户端反馈信息
                BufferedWriter bw1 = new BufferedWriter(new OutputStreamWriter(sgs.getOutputStream()));
                bw1.write("已传输完成");
                bw1.newLine();
                bw1.flush();


            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (br != null) {
                    try {
                        br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (bw != null) {
                    try {
                        bw.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

public class ServerDemo {
    public static void main(String[] args) throws IOException {
        //建立服务器
        ServerSocket sk = new ServerSocket(1110);

        while (true) {//为了使服务器都是开的我们采取while循环来体现服务器
            //侦听此客户端套接字并建立连接
            Socket sgs = sk.accept();

            //创建线程
            new Thread(new SocketImp(sgs)).start();

        }




//        //释放资源
//        sk.close();服务器一直开着就不需要释放资源
    }


}

  • 服务器:接收的数据写入文本文件,给出反馈,代码用线程进行封装,为每一个客户端开启一个线程
  • 原因:
    吴含
    吴含
    输出的内容:
    吴含

版权声明:本文为o676448原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。