TCP通信程序

1 客户端发送一个文件(图片文件)给服务端,服务端保存在本地

package test2;
/**
 * 客户端发送一个文件(图片文件)给服务端,服务端保存在本地
 */
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCPtest {
    /**客户端*/
    public static void main(String[] args) {
        Socket socket= null;
        OutputStream outputStream= null;
        FileInputStream fis= null;
        try {
            socket = new Socket(InetAddress.getByName("127.0.0.1"),9090);
            outputStream = socket.getOutputStream();
            fis = new FileInputStream(new File("D:\\java\\2021.01.28library\\src\\test2\\1603688981208.gif"));

            byte []bytes=new byte[1024];
            int len;
            while ((len=fis.read(bytes))!=-1){
                outputStream.write(bytes,0,len);
            }
            System.out.println("图片已发送!");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        }
}
class server1{
    /**
     * 服务端
     * @param args
     */
    public static void main(String[] args) {
        ServerSocket ss= null;
        Socket sk= null;
        InputStream is= null;
        FileOutputStream fos= null;
        try {
            ss = new ServerSocket(9090);
            sk = ss.accept();
            is = sk.getInputStream();
            fos = new FileOutputStream(new File("1.gif"));
            byte[]buffer=new byte[1024];
            int len;
            while ((len=is.read(buffer))!=-1){
                fos.write(buffer,0,len);
            }
            System.out.println("图片已接收!");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                sk.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                ss.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

2 客户端给服务器发送图片,服务器接受后返回已收到

package test2;

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

/**
 * 客户端给服务器发送图片,服务器接受后返回已收到
 * 客服端与服务端的交互
 */

public class TCPtest2 {
    //客户端
    public static void main(String[] args) {
        Socket socket= null;
        OutputStream outputStream= null;
        FileInputStream fis= null;
        try {
            socket = new Socket(InetAddress.getByName("127.0.0.1"),9090);
            outputStream = socket.getOutputStream();
            fis = new FileInputStream(new File("D:\\java\\2021.01.28library\\src\\test2\\1603688981208.gif"));

            byte []bytes=new byte[1024];
            int len;
            while ((len=fis.read(bytes))!=-1){
                outputStream.write(bytes,0,len);
            }
            System.out.println("图片已发送!");

            //关闭数据输出
            socket.shutdownOutput();
            //接受来自服务器的反馈b并显示
            InputStream is=socket.getInputStream();
            ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
            byte[]buffer=new byte[1024];
            int len1;
            while ((len1=is.read(buffer))!=-1){
                byteArrayOutputStream.write(buffer,0,len1);

            }

            System.out.println(byteArrayOutputStream.toString());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

    }
}

class server2{
    public static void main(String[] args) {
        ServerSocket ss= null;
        Socket sk= null;
        InputStream is= null;
        FileOutputStream fos= null;
        try {
            ss = new ServerSocket(9090);
            sk = ss.accept();
            is = sk.getInputStream();
            fos = new FileOutputStream(new File("2.gif"));
            byte[]buffer=new byte[1024];
            int len;
            while ((len=is.read(buffer))!=-1){
                fos.write(buffer,0,len);
            }
            System.out.println("图片已接收!");
            //服务器给与客户端反馈

            OutputStream outputStream=sk.getOutputStream();
            outputStream.write("你好,文件已接收!".getBytes());

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                sk.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                ss.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }


    }
}


2 客户端:发送文件,数据来自于纯文本文件 ;服务器:接收到的数据写入文本文件

package demo2;

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

/**
 * 案例需求
 * 客户端:发送文件,数据来自于纯文本文件
 * 服务器:接收到的数据写入文本文件
 * 案例分析
 * 创建客户端,创建输入流对象指向文件,从文件循环读取数据,每读取一行就使用输出流给服
 * 务器输出一行
 * 创建服务端,创建输出流对象指向文件,从客户端接受数据,每接受一行就给文件中输出一行
 */
//客户端
public class Client {
    public static void main(String[] args) {
        Socket socket= null;
        BufferedReader bufferedReader= null;
        try {
            //创建客户端Socket对象
            socket = new Socket("127.0.0.1",9090);

            //文本文件
            File file=new File("send.txt");
            if(!file.exists()){
                file.createNewFile();
            }
            //对文本文件进行封装
            bufferedReader = new BufferedReader(new FileReader(file));
            //对写入流数据进行封装
            BufferedWriter bufferedWriter=new BufferedWriter((new OutputStreamWriter(socket.getOutputStream())));

            //读取数据并发送
            String linestr=null;
            int linenum=1;
            while ((linestr=bufferedReader.readLine())!=null){
                bufferedWriter.write(linestr);
                System.out.println("成功发送第"+linenum+"行");
                bufferedWriter.newLine();
                bufferedWriter.flush();
                linenum++;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            try {
                bufferedReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

package demo2;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 案例需求
 * 客户端:发送文件,数据来自于纯文本文件
 * 服务器:接收到的数据写入文本文件
 * 案例分析
 * 创建客户端,创建输入流对象指向文件,从文件循环读取数据,每读取一行就使用输出流给服
 * 务器输出一行
 * 创建服务端,创建输出流对象指向文件,从客户端接受数据,每接受一行就给文件中输出一行
 */

public class Server {
    public static void main(String[] args) {
        BufferedReader bufferedReader= null;
        BufferedWriter bufferedWriter= null;
        try {
            //创建服务器Socket对象
            ServerSocket serverSocket=new ServerSocket(9090);

            //建立客户端监听
            Socket socket=serverSocket.accept();

            //接收数据
            bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            //把数据写入文件
            bufferedWriter = new BufferedWriter(new FileWriter("receive.txt"));

            String linestr=null;
            int linenum=1;
            while ((linestr=bufferedReader.readLine())!=null){
                bufferedWriter.write(linestr);
                System.out.println("成功接收第"+linenum+"行");
                bufferedWriter.newLine();
                bufferedWriter.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            try {
                bufferedWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                bufferedReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值