新手学习-网络编程之TCP传输文件
上一篇《网络编程之TCP实现聊天》已经简单介绍了TCP的概念及三次握手、四次挥手的通俗理解方式,这里不再赘述,仅展示Java网络编程中的使用TCP协议实现传输文件。
"D:\\Program Files\\ideaIU\\IdeaWorkspace\\网络编程\\girl.jpg" //即将被传输的文件的绝对路径
"received.jpg" //接收到文件时将其命名为这个名称
完整源码如下:
客户端
package tcp;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
public class FilesClient {
public static void main(String[] args) throws Exception {
//创建Socket连接
InetAddress byName = InetAddress.getByName("127.0.0.1");
int port = 9000;
Socket socket = new Socket(byName,port);
//创建输出流
OutputStream outputStream = socket.getOutputStream();
//读取文件
FileInputStream fileInputStream = new FileInputStream(new File("D:\\Program Files\\ideaIU\\IdeaWorkspace\\网络编程\\girl.jpg"));
//写出文件
byte[] buffer = new byte[2014];
int length;
while ((length=fileInputStream.read(buffer))!=-1){
outputStream.write(buffer,0,length);
}
//告诉服务器已经结束
socket.shutdownOutput();
//确定服务器接收完毕 才能断开连接
InputStream inputStream = socket.getInputStream();
//服务器发过来的是Byte[]
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] bytes = new byte[2014];
int len;
while ((len=inputStream.read(bytes))!=-1){
byteArrayOutputStream.write(bytes,0,len);
}
System.out.println(byteArrayOutputStream.toString());
//关闭资源
byteArrayOutputStream.close();
inputStream.close();
fileInputStream.close();
outputStream.close();
socket.close();
}
}
服务端
package tcp;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class FilesServer {
public static void main(String[] args) throws Exception {
//创建服务
ServerSocket serverSocket = new ServerSocket(9000);
//监听客户端的连接
Socket accept = serverSocket.accept(); //阻塞式监听,会一直等待客户端的连接
//获取输入流
InputStream inputStream = accept.getInputStream();
//文件输出
FileOutputStream fileOutputStream = new FileOutputStream(new File("received.jpg"));
int len;
byte[] bytes = new byte[2014];
while ((len=inputStream.read(bytes))!=-1){
fileOutputStream.write(bytes,0,len);
}
//通知客户端接收完毕了
OutputStream outputStream = accept.getOutputStream();
outputStream.write("我结束了,你可以断开了!".getBytes());
//关闭资源
fileOutputStream.close();
inputStream.close();
accept.close();
serverSocket.close();
}
}