AI智能
改变未来

Java:基于TCP协议socket网络编程的文件传送


Java:基于TCP协议socket网络编程的文件传送

先了解一下socket基本概念

socket也叫套接字:

是指在网路中不同主机上的应用进程之间,进行双向通信的端点的抽象。

简单理解就是:

两个主机之间要通信,就需要知道彼此的ip,端口号等信息,而一台主机这些信息的集合:

就可以理解为一个端点,即为套接字

双方通过套接字作为一种坐标,建立信息通道,形成连接(两点连接一条直线)

简单理解了套接字的概念后,来看看如何通过java socket编程来实现

两台主机文件的接收与发送:

代码如下:

发送方:

import java.io.*;import java.net.InetAddress;import java.net.Socket;/*** 发送者*/public class TcpSendCilent {public static void main(String[] args) throws Exception {//1.通过socket对象  创建socket连接Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);//2,创建一个字节输出流OutputStream os = socket.getOutputStream();//3.字节文件输入流 读取文件//避免出错 写需要发送文件的绝对路径FileInputStream fis = new FileInputStream(new File("F:/TEST/1604407051256.jpg"));//4.字节文件输出流 写出文件byte[] buffer=new byte[1024*10];int len;while ((len=fis.read(buffer))!=-1){//socket编程基于I/O流 所以//输出流写转为字节数组的文件  =向接收方发送文件os.write(buffer,0,len);}//通知服务器我传送完了 调用shutdownOutput() 否则影响接下来代码执行socket.shutdownOutput();//确定服务器接受完毕,断开连接//获取接收方响应回来的 接受完毕! 响应InputStream inputStream = socket.getInputStream();ByteArrayOutputStream baos=new ByteArrayOutputStream();byte[] bytes2=new byte[1024*10];int len2;while ((len2=inputStream.read(bytes2))!=-1){baos.write(bytes2,0,len2);}//显示接收方的响应System.out.println(baos.toString());//发送结束后,最后关闭所有资源//关闭资源好习惯 这部分写的简单//一般建议先进行一个非空判断再关闭baos.close();fis.close();os.close();socket.close();}}

接收方:

import java.io.*;import java.net.ServerSocket;import java.net.Socket;/*** 接收端*/public class TcpAcceptServer {public static void main(String[] args) throws IOException {//通过ServerSocket对象 创建接收端套接字ServerSocket serverSocket=null;//套接字Socket socket=null;//字节输入流InputStream in=null;//默认参数定义端口号  发送方依据这个端口号发送serverSocket=new ServerSocket(9000);socket = serverSocket.accept();//socket对象 获取输入流,拿到文件in = socket.getInputStream();//将发送者发送过来的 文件通过文件字节输出流 输出到指定路径下FileOutputStream fos = new FileOutputStream(new File("F:/recevice.jpg"));int len;byte[] bytes=new byte[1024*10];while ((len=in.read(bytes))!=-1){fos.write(bytes,0,len);}//通知发送者接受完毕了OutputStream outputStream = socket.getOutputStream();outputStream.write("我是文件接收者:我已成功接受".getBytes());//接受结束后,关闭资源好习惯 这部分写的简单//一般建议先进行一个非空判断再关闭fos.close();serverSocket.close();socket.close();in.close();}}

测试方法:

以上代码可直接粘贴测试

1、先运行接收者等待接受,

2、再运行发送者,

3、等待接收者向发送者响应: 我是文件接收者:我已成功接受;

4、接收者指定接受目录下、查看接收文件存在即为接收成功!

总结:

这个demo实现并不是很难,主要考验了我们对于io流的熟练程度

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Java:基于TCP协议socket网络编程的文件传送