TCP编程

该文章展示了如何使用Java的Socket进行TCP通信,实现文件的上传和下载。服务器端监听8008端口,接收客户端发送的文件并保存到本地,同时向客户端发送确认消息。客户端则将本地文件发送至服务器,并读取服务器的反馈信息。

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

使用Java进行TCP编程时,需要使用Socket模型

什么是Socket?

在开发网络应用程序的时候,会遇到Socket这个概念。Socket是一个抽象概念,一个应用程序通过一个Socket来建立一个远程连接,而Socket内部通过TCP/IP协议把数据传输到网络。

(1)TCP服务器端

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

// 文件服务器
public class Main {
	public static void main(String[] args) {
		try (ServerSocket server = new ServerSocket(8008)) {
			
			while(true){
				// 客户端连接
				Socket client = server.accept();
				
				// 文件名
				String fileName = String.format("%s.jpg", client.getInetAddress().getHostName());
				
				try(BufferedInputStream bis = new BufferedInputStream(client.getInputStream());
						BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("d:\\test\\upload\\"+fileName));
						OutputStream out = client.getOutputStream();){
					
					// 读取客户端发送的文件字节内容,并写入本地磁盘文件
					byte[] buff = new byte[1024];
					int len = -1;
					
					while((len = bis.read(buff))!= -1) {
						bos.write(buff,0,len);
						System.out.println("【服务器】"+len);
					}
					bos.flush();
					System.out.println("【服务器】上传完毕!!!!");
					
					// 向客户端发送“反馈消息”
					out.write("文件上传成功!".getBytes(StandardCharsets.UTF_8));
					out.flush();
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

(2)TCP客户端

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

// 文件上传客户端
public class Main {
	public static void main(String[] args) {
		try (Socket socket = new Socket("127.0.0.1",8008);
				BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\Users\\APESOURCE\\Pictures\\baby.jpg"));
				BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
				BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
			
			
			// 读取本地文件,发送至服务器
			byte[] buff = new byte[1024];
			int len = -1;
			while((len = bis.read(buff)) != -1) {
				bos.write(buff,0,len);
				System.out.println(len);
			}
			bos.flush();
			bos.close();
			
			
			// 读取服务器反馈消息
			String message =  reader.readLine();
			message = new String(message.getBytes(),StandardCharsets.UTF_8);
			System.out.println(message);
			
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lcannal

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值