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

网友投稿 369 2023-03-04

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);

}

//通知服务器我传送完了 调用shutdhttp://ownOutput() 否则影响接下来代码执行

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流的熟练程度

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:vue开发百度小程序(vue 小程序开发)
下一篇:车载生态(车载生态,智能化生态发展供应商上市公司)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~