Tcp编程

文章提供了两个TCP网络编程的案例,一个是客户端发送图片路径给服务端,服务端接收到后下载图片;另一个是客户端请求文件,服务端根据请求查找并返回文件,或提供默认文件。涉及的关键技术包括Socket通信、字节流处理和文件操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    Tcp是网络编程中使用最多的一种,因为他可靠也能传输数据量大的文件。

    下面是两个小案例,第一个是客户端给服务端发送要下载的图片路径,客户端在收到后完成下载。

package Tcp编程图片;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
/**
 * @author庞慧斌最牛逼~~ version 2.0
 */
public class Client {
    public static void main(String[] args) throws IOException {
        //客户端给8888端口发送消息
        Socket socket = new Socket(InetAddress.getLocalHost(),8888);
        String path = "d:\\2.jpg";
        //创建BufferedInputStream对象获取图片信息
        BufferedInputStream bufferedInputStream = new BufferedInputStream(new 
        FileInputStream(path));
        //将图片信息转成字节数组
        byte b[] = stremToByte.convertInputStreamToByteArray(bufferedInputStream);
        //通过socket获取输出流将文件信息写入
        OutputStream outputStream1 = socket.getOutputStream();
        BufferedOutputStream bufferedOutputStream = new                             
        BufferedOutputStream(outputStream1);
        bufferedOutputStream.write(b);
        //关闭资源
        bufferedInputStream.close();
        bufferedOutputStream.close();
        bufferedInputStream.close();
        outputStream1.close();
        socket.close();
    }

}


package Tcp编程图片;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * @author庞慧斌最牛逼~~ version 2.0
 */
public class Sever {
    public static void main(String[] args) throws IOException {
        //服务端在8888端口监听
        ServerSocket serverSocket = new ServerSocket(8888);
        //服务端等待连接
        Socket accept = serverSocket.accept();
        System.out.println("等待连接");
        //选择需要下载的路径
        String path = "src\\ptoto";
        //通过socket.getInputStrem 获取客户端发送的文件信息
        InputStream inputStream = accept.getInputStream();
        BufferedInputStream bufferedInputStream = new             
        BufferedInputStream(accept.getInputStream());
        //通过工具类将其转换成字节数组
        byte[] bytes = stremToByte.convertInputStreamToByteArray(bufferedInputStream);
        //创建 BufferedOutputStream对象将文件写入选则好的路径
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new 
        FileOutputStream(path));
        bufferedOutputStream.write(bytes);
        //关闭资源
        bufferedInputStream.close();
        inputStream.close();
        bufferedOutputStream.close();
        serverSocket.close();
        accept.close() ;
    }
}



//这是自己写的工具类,可以将输入流转换成字节数组
package Tcp编程图片;
import java.io.*;
/**
 * @author庞慧斌最牛逼~~ version 2.0
 */
public class stremToByte {
    public static byte[] convertInputStreamToByteArray(InputStream inputStream) throws IOException {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        byte[] buffer = new byte[1024];
        int n;
        while ((n = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, n);
        }

        return outputStream.toByteArray();
    }
//将输入流转成字符串
    public static String convertToString(InputStream inputStream) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        StringBuilder stringBuilder = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            stringBuilder.append(line);
        }
        return stringBuilder.toString();
    }

}

     第二个相对复杂一点,客户端发送一个想要下载的文件给服务端,服务端接收后开始查找,如果有就返回,否则返回默认文件,客户端收到返回后开始下载到本地。

package tcp作业2;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

/**
 * @author庞慧斌最牛逼~~ version 2.0
 */
public class client {
    public static void main(String[] args) throws IOException {
        //与服务端连接
        Socket socket = new Socket(InetAddress.getLocalHost(),9999);
        //从键盘获取用户想下载的文件
        Scanner scanner = new Scanner(System.in);
        String next = scanner.next();
        //将其发送给服务端
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bufferedWriter.write(next);
        bufferedWriter.flush();
        socket.shutdownOutput();
        //读取服务端传回的文件信息
        BufferedInputStream bufferedInputStream = new BufferedInputStream(socket.getInputStream());
        byte[] bytes = stremToByte.convertInputStreamToByteArray(bufferedInputStream);
        //创建路径,将其下载
        String path = "e:\\"+next+".mp3";
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(path));
        bufferedOutputStream.write(bytes);
        bufferedOutputStream.close();
        bufferedInputStream.close();
        socket.close();
        bufferedWriter.close();
    }
}



package tcp作业2;

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

/**
 * @author庞慧斌最牛逼~~ version 2.0
 */
public class sever {
    public static void main(String[] args) throws IOException {
        //服务端在9999端口监听,准备接收客户端的消息
        ServerSocket serverSocket = new ServerSocket(9999);
        //等待连接
        Socket socket = serverSocket.accept();
        //创建 BufferedInputStream对象 接受客户端的消息
        InputStream inputStream = socket.getInputStream();
        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
        byte[] bytes = new byte[1024];
        int rend = 0;
        String download = "";
        while ((rend = bufferedInputStream.read(bytes))!=-1){
          download+= new String(bytes,0,rend);
        }
        System.out.println("客户端希望下载的文件是" + download);
        //开始查找有无对应的文件
        String resload = "";
        if("1".equals(download)){
            resload = "src\\1.mp3";
        } else  {
            resload = "src\\2.mp3";
        }
        //将找到的文件进行返回
        BufferedInputStream bufferedInputStream1 = new BufferedInputStream(new FileInputStream(resload));
        byte[] bytes1 = stremToByte.convertInputStreamToByteArray(bufferedInputStream1);
        //发送给客户端
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream());
        bufferedOutputStream.write(bytes1);
        bufferedOutputStream.flush();
        socket.shutdownOutput();

    }
}


package tcp作业2;

import java.io.*;

/**
 * @author庞慧斌最牛逼~~ version 2.0
 */
public class stremToByte {
    public static byte[] convertInputStreamToByteArray(InputStream inputStream) throws IOException {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        byte[] buffer = new byte[1024];
        int n;
        while ((n = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, n);
        }

        return outputStream.toByteArray();
    }
    public static String convertToString(InputStream inputStream) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        StringBuilder stringBuilder = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            stringBuilder.append(line);
        }
        return stringBuilder.toString();
    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值