- 浏览: 455516 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
飞天奔月:
我来个简单点的代码 使用 LinkedHashSetpubli ...
ArrayList去重 -
飞天奔月:
public static <T> List< ...
ArrayList去重 -
aaron7524:
事务隔离级别 -
月陨殇:
wlh269 写道rswh110 写道lz内容写的不错,就是略 ...
事务隔离级别 -
lnx1824:
我的更奇怪,在本地静态的可以,放jetty里的页面后就不然,都 ...
JS得到上传图片尺寸
要求将服务端文件夹A下的文件拷贝到客户端文件A下 删除服务端文件夹A下的文件;
客户端文件夹B下的文件拷贝到服务端文件B下 然后删除客户端文件夹B下的文件;
技巧:实现过程中将要传输的文件打包后传输
服务端:
客户端:
配置文件:
参数加载器:
ZIP压缩和解压缩工具包:
客户端文件夹B下的文件拷贝到服务端文件B下 然后删除客户端文件夹B下的文件;
技巧:实现过程中将要传输的文件打包后传输
服务端:
package com.socket.filetrans.exe; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; import java.util.Properties; import com.socket.filetrans.LoadParamConfig; import com.socket.zip.util.ZipUtil; public class ServerTest { int port = 0; static String SERVER_SENDPATH = ""; String SERVER_SAVEPATH=""; ServerSocket ss = null; Socket s = null; DataInputStream dis=null; DataOutputStream dos=null; static List fileList=new ArrayList(); static ZipUtil zipUtilObj=new ZipUtil(); public ServerTest() throws IOException{ Properties properties=LoadParamConfig.getProperties(); SERVER_SENDPATH=properties.getProperty("SERVER_SENDPATH"); SERVER_SAVEPATH=properties.getProperty("SERVER_SAVEPATH"); port=Integer.parseInt(properties.getProperty("SOCKET_PORT")); ss=new ServerSocket(port); File file=new File(SERVER_SENDPATH); if(!file.exists()){ file.mkdir(); System.out.println("创建目录:"+SERVER_SENDPATH); } File file2=new File(SERVER_SAVEPATH); if(!file2.exists()){ file2.mkdir(); System.out.println("创建目录:"+SERVER_SAVEPATH); } } public static void main(String arg[]) { try { ServerTest server=new ServerTest(); while(true){ fileList=new ArrayList(); server.serverStart(); server.deleteDirectory(new File(SERVER_SENDPATH)); fileList=null; //短时间内new socket操作很多,而socket.close()操作并不能立即释放绑定的端口, //而是把端口设置为TIME_WAIT状态,过段时间(默认240s)才释放 Thread.sleep(240000); } } catch (Exception e) { e.printStackTrace(); } } public void serverStart() throws Exception { //===============================服务端批量写文件==========================================// File ZipFilePath=null; getAllFiles(SERVER_SENDPATH); while(true){ if(new File(SERVER_SENDPATH).renameTo(new File(SERVER_SENDPATH))){ if(fileList.size()>0){ //压缩文件 zipUtilObj.zip(SERVER_SENDPATH+".zip", SERVER_SENDPATH); //压缩文件绝对路径 ZipFilePath=new File(SERVER_SENDPATH+".zip"); //写文件名 s = ss.accept(); dos = new DataOutputStream(s.getOutputStream()); dos.writeUTF(ZipFilePath.getName()); System.out.println("服务端写文件名"); dos.close(); //读确认信息 s = ss.accept(); dis= new DataInputStream(new BufferedInputStream(s.getInputStream())); System.out.println(dis.readUTF()); //写数据 s = ss.accept(); DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(ZipFilePath))); int bufferSize = 8192; byte[] buf = new byte[bufferSize]; int read = 0; while ((read = fis.read(buf))!=-1) { dos = new DataOutputStream(s.getOutputStream()); dos.write(buf, 0, read); } dos.flush(); fis.close(); s.close(); System.out.println("服务端 写数据完成..."); //读信号 s = ss.accept(); dis= new DataInputStream(new BufferedInputStream(s.getInputStream())); System.out.println("服务端 读信号:"+dis.readUTF()+"\n"); } break; } } // 服务端文件结束标志 System.out.println("服务端没有数据发送或发送完成!"); s = ss.accept(); dos = new DataOutputStream(s.getOutputStream()); dos.writeUTF("serverFileSendOver"); dos.close(); //删除发送完的zip文件 boolean deleted2=false; if(ZipFilePath!=null){ while(!deleted2){ deleted2=ZipFilePath.delete(); } } //===============================服务端批量写文件 结束==========================================// //===============================服务端批接收 文件==============================================// String fileABSPath=""; File tempFile=null; while(true){ //读文件名 或者结束标志 s = ss.accept(); dis= new DataInputStream(new BufferedInputStream(s.getInputStream())); String fileName=""; if("clientFileSendOver".endsWith(fileName=dis.readUTF())){ System.out.println("服务端 收到客户端文件结束标志:"+fileName); break; } System.out.println("服务端 收到文件名:"+fileName); //写确认信息 s = ss.accept(); dos = new DataOutputStream(new BufferedOutputStream(s.getOutputStream())); dos.writeUTF("服务端 确认收到文件名:"+fileName); // dos.flush(); dos.close(); //读文件 fileABSPath=SERVER_SAVEPATH+File.separator+fileName; File tempdir=new File(fileABSPath.substring(0, fileABSPath.lastIndexOf("\\"))); tempFile=new File(fileABSPath); if(!tempdir.exists()){ tempdir.mkdirs(); } if(!tempFile.exists()){ tempFile.createNewFile(); } s = ss.accept(); DataOutputStream fos = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(tempFile)))); dis= new DataInputStream(new BufferedInputStream(s.getInputStream())); int bufferSize = 8192; byte[] buf = new byte[bufferSize]; int read = 0; while ((read = dis.read(buf))!=-1) { fos.write(buf, 0, read); } fos.close(); System.out.println("服务端 读取数据完成..."); //写信号 s = ss.accept(); dos = new DataOutputStream(new BufferedOutputStream(s.getOutputStream())); dos.writeUTF("ServerRecieved"); // dos.flush(); dos.close(); System.out.println("......服务端 接收数据结束...开始解压文件..."); } //解压数据 if(!"".equals(fileABSPath) && ".zip".equals(fileABSPath.substring(fileABSPath.lastIndexOf(".")))){ zipUtilObj.unzip(fileABSPath, SERVER_SAVEPATH); } //删除压缩文件 boolean deleted=false; if(tempFile!=null){ while(!deleted){ deleted=tempFile.delete(); } } } //===============================服务端批接收 文件 结束==============================================// /* * 递归删除一个目录以及下面的文件 */ public boolean deleteDirectory(File path) { if( path.exists() ) { File[] files = path.listFiles(); for(int i=0; i<files.length; i++) { if(files[i].isDirectory()) { deleteDirectory(files[i]); } else { //删除文件 files[i].delete(); } } } //删除目录 boolean hasdelete=false; if(!SERVER_SENDPATH.equals(path.getAbsolutePath())){ hasdelete=path.delete(); if(hasdelete){ System.out.println("删除目录:"+path); } } return hasdelete; } /** * 得到服务端要发送的文件列表 * @param dir * @return * @throws Exception */ public void getAllFiles(String dir) throws Exception{ File file=new File(dir); if(!file.exists()){ file.mkdir(); } File[] fs = file.listFiles(); if(fs!=null){ for(int i=0; i<fs.length; i++){ if(fs[i].isFile()){ fileList.add(fs[i].getAbsolutePath().substring(SERVER_SENDPATH.length())); } if(fs[i].isDirectory()){ try{ getAllFiles(fs[i].getPath()); }catch(Exception e){} } } } } }
客户端:
package com.socket.filetrans.exe; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.net.Socket; import java.util.ArrayList; import java.util.List; import java.util.Properties; import com.socket.filetrans.LoadParamConfig; import com.socket.zip.util.ZipUtil; public class ClientTest { private Socket socket = null; private String ip = "";// 设置成服务器IP private int port = 0; static List fileList=null;; static String CLIENT_SENDPATH =""; String CLIENT_SAVEPATH=""; DataInputStream dis=null; DataOutputStream dos=null; static ZipUtil zipUtilObj=new ZipUtil(); public ClientTest() { try { Properties properties=LoadParamConfig.getProperties(); CLIENT_SENDPATH=properties.getProperty("CLIENT_SENDPATH"); CLIENT_SAVEPATH=properties.getProperty("CLIENT_SAVEPATH"); port=Integer.parseInt(properties.getProperty("SOCKET_PORT")); ip=properties.getProperty("IP_ADDRESS"); File file=new File(CLIENT_SENDPATH); if(!file.exists()){ file.mkdir(); System.out.println("创建目录:"+CLIENT_SENDPATH); } File file2=new File(CLIENT_SAVEPATH); if(!file2.exists()){ file2.mkdir(); System.out.println("创建目录:"+CLIENT_SAVEPATH); } } catch (Exception ex) { ex.printStackTrace(); } } public static void main(String arg[]) { try { ClientTest client=new ClientTest(); while(true){ fileList=new ArrayList(); client.clientStart(); client.deleteDirectory(new File(CLIENT_SENDPATH)); fileList=null; //短时间内new socket操作很多,而socket.close()操作并不能立即释放绑定的端口, //而是把端口设置为TIME_WAIT状态,过段时间(默认240s)才释放 Thread.sleep(240000); } } catch (Exception e) { e.printStackTrace(); } } public void clientStart() throws Exception { String fileABSPath=""; File tempFile=null; //=======================客户端批量 读取文件==================================// while(true){ //读文件名 或者结束标志 socket = new Socket(ip, port); dis= new DataInputStream(new BufferedInputStream(socket.getInputStream())); String fileName=""; if("serverFileSendOver".endsWith(fileName=dis.readUTF())){ System.out.println("客户端 收到服务端文件结束标志:"+fileName); break; } System.out.println("收到文件名:"+fileName); //写确认信息 socket = new Socket(ip, port); dos = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); dos.writeUTF("客户端 确认收到文件名:"+fileName); // dos.flush(); dos.close(); //读 fileABSPath=CLIENT_SAVEPATH+File.separator+fileName; File tempdir=new File(fileABSPath.substring(0, fileABSPath.lastIndexOf("\\"))); tempFile=new File(fileABSPath); if(!tempdir.exists()){ tempdir.mkdirs(); } if(!tempFile.exists()){ tempFile.createNewFile(); } socket = new Socket(ip, port); DataOutputStream fos = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(tempFile)))); dis= new DataInputStream(new BufferedInputStream(socket.getInputStream())); int bufferSize = 8192; byte[] buf = new byte[bufferSize]; int read = 0; while ((read = dis.read(buf))!=-1) { fos.write(buf, 0, read); } fos.close(); System.out.println("客户端 读取数据完成..."); //写信号 socket = new Socket(ip, port); dos = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); dos.writeUTF("ClientRecieved"); System.out.println("客户端 发送 收到信号:ClientRecieved"+"\n"); // dos.flush(); dos.close(); System.out.println("......客户端 接收数据结束...开始解压文件..."); } //解压数据 if(!"".equals(fileABSPath) && ".zip".equals(fileABSPath.substring(fileABSPath.lastIndexOf(".")))){ zipUtilObj.unzip(fileABSPath, CLIENT_SAVEPATH); } //删除压缩文件 boolean deleted=false; if(tempFile!=null){ while(!deleted){ deleted=tempFile.delete(); } } //=======================客户端批量 读取文件 结束==================================// //=======================客户端批量 发送文件 ==================================// File ZipFilePath=null; getAllFiles(CLIENT_SENDPATH); while(true){ if(new File(CLIENT_SENDPATH).renameTo(new File(CLIENT_SENDPATH))){ if(fileList.size()>0){ //压缩文件 zipUtilObj.zip(CLIENT_SENDPATH+".zip", CLIENT_SENDPATH); //压缩文件绝对路径 ZipFilePath=new File(CLIENT_SENDPATH+".zip"); //写文件名 socket = new Socket(ip, port); dos = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); dos.writeUTF(ZipFilePath.getName()); System.out.println("客户端写文件名"); // dos.flush(); dos.close(); //读确认信息 socket = new Socket(ip, port); dis= new DataInputStream(new BufferedInputStream(socket.getInputStream())); System.out.println(dis.readUTF()); //写数据 socket = new Socket(ip, port); DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(ZipFilePath))); int bufferSize = 8192; byte[] buf = new byte[bufferSize]; int read = 0; while ((read = fis.read(buf))!=-1) { dos = new DataOutputStream(socket.getOutputStream()); dos.write(buf, 0, read); } dos.flush(); fis.close(); socket.close(); System.out.println("客户端 写数据完成..."); //读信号 socket = new Socket(ip, port); dis= new DataInputStream(new BufferedInputStream(socket.getInputStream())); System.out.println("客户端 读信号:"+dis.readUTF()+"/n"); } break; } } //客户端文件结束标志 System.out.println("客户端 没有数据发送或发送完成!"); socket = new Socket(ip, port); dos = new DataOutputStream(socket.getOutputStream()); dos.writeUTF("clientFileSendOver"); dos.close(); //删除发送完的zip文件 boolean deleted2=false; if(ZipFilePath!=null){ while(!deleted2){ deleted2=ZipFilePath.delete(); } } //=======================客户端批量 发送文件 结束 ==================================// } /* * 递归删除一个目录以及下面的文件 */ public boolean deleteDirectory(File path) { if( path.exists() ) { File[] files = path.listFiles(); for(int i=0; i<files.length; i++) { if(files[i].isDirectory()) { deleteDirectory(files[i]); } else { //删除文件 files[i].delete(); } } } //删除目录 boolean hasdelete=false; if(!CLIENT_SENDPATH.equals(path.getAbsolutePath())){ hasdelete=path.delete(); if(hasdelete){ System.out.println("删除目录:"+path); } } return hasdelete; } /** * 得到服务端要发送的文件列表 * @param dir * @return * @throws Exception */ public void getAllFiles(String dir) throws Exception{ File file=new File(dir); if(!file.exists()){ file.mkdir(); } File[] fs = file.listFiles(); if(fs!=null){ for(int i=0; i<fs.length; i++){ if(fs[i].isFile()){ fileList.add(fs[i].getAbsolutePath().substring(CLIENT_SENDPATH.length())); } if(fs[i].isDirectory()){ try{ getAllFiles(fs[i].getPath()); }catch(Exception e){} } } } } }
配置文件:
######### CLIENT_CONFIG ######### CLIENT_SENDPATH=D:\\SOCKET\\client_fa CLIENT_SAVEPATH=D:\\SOCKET\\client_shou SOCKET_PORT=8873 IP_ADDRESS=localhost ######### SERVER_CONFIG ######### SERVER_SENDPATH=D:\\SOCKET\\server_fa SERVER_SAVEPATH=D:\\SOCKET\\server_shou
参数加载器:
package com.socket.filetrans; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.Properties; public class LoadParamConfig { public static Properties getProperties(){ Properties properties=new Properties(); URL url= Thread.currentThread().getContextClassLoader().getResource("config.properties"); InputStream in = null; if(url != null){ try { in = url.openStream(); properties.load(in); //String path=properties.getProperty("importFilePath"); } catch (IOException e) { e.printStackTrace(); } } return properties; } }
ZIP压缩和解压缩工具包:
package com.socket.zip.util; import java.util.*; import java.util.zip.*; import java.io.*; public class ZipUtil { public void zip(String zipFileName,String inputFile)throws Exception{ zip(zipFileName,new File(inputFile)); } public void zip(String zipFileName,File inputFile)throws Exception{ ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipFileName)); zip(out,inputFile,""); System.out.println("zip done"); out.close(); } public void unzip(String zipFileName,String outputDirectory)throws Exception{ ZipInputStream in=new ZipInputStream(new FileInputStream(zipFileName)); ZipEntry z; while ((z=in.getNextEntry() )!= null) { System.out.println("unziping "+z.getName()); if (z.isDirectory()) { String name=z.getName(); name=name.substring(0,name.length()-1); File f=new File(outputDirectory+File.separator+name); f.mkdir(); System.out.println("mkdir "+outputDirectory+File.separator+name); } else{ File f=new File(outputDirectory+File.separator+z.getName()); f.createNewFile(); FileOutputStream out=new FileOutputStream(f); int b; while ((b=in.read()) != -1) out.write(b); out.close(); } } in.close(); } public void zip(ZipOutputStream out,File f,String base)throws Exception{ System.out.println("Zipping "+f.getName()); if (f.isDirectory()) { File[] fl=f.listFiles(); out.putNextEntry(new ZipEntry(base+"/")); base=base.length()==0?"":base+"/"; for (int i=0;i<fl.length ;i++ ) { zip(out,fl[i],base+fl[i].getName()); } } else { out.putNextEntry(new ZipEntry(base)); FileInputStream in=new FileInputStream(f); int b; while ((b=in.read()) != -1) out.write(b); in.close(); } } public static void main(String[] args) { try{ ZipUtil t=new ZipUtil(); t.zip("D:\\wulihai\\SocketTrans.zip","D:\\wulihai\\SocketTrans"); t.unzip("D:\\wulihai\\SocketTrans.zip","D:\\wulihai\\开发手册"); } catch(Exception e){e.printStackTrace(System.out);} } }
- SocketTrans.rar (18 KB)
- 下载次数: 103
发表评论
-
java开发实战视频详解
2017-07-02 08:09 510java开发实战视频详解 链接: http://pan.bai ... -
ArrayList去重
2013-04-25 10:18 3294public static List removeDuplic ... -
java ArrayList 自定义排序
2013-04-22 11:39 2159import java.util.ArrayList; imp ... -
按照指定编码读取配置文件
2012-12-13 10:17 895BufferedReader reader = new Buf ... -
java读取系统编码
2012-12-13 09:45 896public static void main(String[ ... -
Axis2和现有项目的集成
2011-08-11 10:08 1398axis2和现有项目集成 1.下载axis2-1.5-war. ... -
阻塞队列
2010-09-03 08:54 1226ArrayBlockingQueue为阻塞队列,加入和取出元素 ... -
axis2和JDK1.5开发(文件传输服务)详解二(图解)
2010-06-28 16:36 22905.生成webservice服务端代 ... -
产生随机字符串
2010-05-05 17:13 1059import java.util.Random; p ... -
常用IO操作
2009-09-22 13:22 1304例子:写文件,在文件末尾追加文字并且指定输出文件内容字符编码为 ... -
FileChannel锁定文件
2009-09-22 10:52 2414当FileLock fl = fc.tryLock();执行成 ... -
ZIP 压缩 和解压缩
2009-09-21 15:40 1123package com.socket.zip.util; ... -
Oracle number类型查询精度丢失问题
2009-08-21 16:00 6790一、需求中要求查到一个字段的值然后保持小数点后2位 ... -
Oracle number类型数据取出来后四舍五入到小数点后2位
2009-08-19 10:46 8127package com.wlh.test; impo ... -
将汉字编码为unicode
2009-07-28 10:26 886package test; import java. ... -
验证码
2009-07-05 17:29 1282验证servlet: package edu.yale. ... -
java.util.Date对象和String对象转换 SimpleDateFormat
2009-06-30 15:35 3066import java.text.ParseExcept ... -
Socket高级编程 多客户端
2009-06-26 14:03 2565客户端: package com.wlh.test; ... -
进制转换
2009-06-18 12:48 115516进制和字符串之间转换--- import java ... -
bat 命令学习
2009-06-01 23:59 11301.Echo 命令 打开回显或关闭请求回显功能,或显示消 ...
相关推荐
Socket文件传输是一种网络通信技术,它允许两台计算机通过Internet或其他网络进行数据交换。在本软件中,MFC(Microsoft Foundation Classes)库被用来实现面向对象的编程,以构建一个功能完善的Socket文件传输系统...
在这个“socket文件传输(TCP)源码实例”中,我们将深入理解如何利用TCP协议通过socket进行文件传输。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,确保了数据的...
在Android平台上,Socket文件传输是一种常见的通信方式,尤其适用于设备间的文件共享,即使涉及的是大文件,如几十兆(MB)的数据。本文将深入探讨如何使用Android的Socket进行文件传输,以及实现过程中需要注意的关键...
在压缩包中的`SocketDemo`项目中,应该包含了实现这个功能的C#代码示例,你可以参考其中的`Server`和`Client`类,理解并学习如何使用Socket进行文件传输。通过实际操作,你会更深入地掌握C# Socket通信的核心技巧。
在这个主题中,我们将深入探讨Java中的Socket文件传输编程以及多线程的应用。 首先,理解Socket的基本概念至关重要。Socket可以看作是网络上的端点,允许两个应用程序通过网络进行通信。在Java中,`java.net.Socket...
标题"“MFC socket 文件传输”"指出,这个项目或教程主要关注如何使用MFC库来构建一个文件传输应用,该应用利用Socket技术进行文件的发送和接收。这通常涉及以下知识点: 1. **MFC基础**:理解MFC框架的基本结构,...
本项目"socket文件传输代码"显然是一个利用Java实现的GUI(图形用户界面)应用,使得客户端能够向服务器端发送文件。 首先,我们来了解一下Socket的基本概念。Socket是TCP/IP协议族的一部分,它为两台机器上的进程...
在这个“Socket文件传输源码”中,我们很显然会看到如何使用Java的Socket类来实现在两个应用程序之间传输文件。以下是对这个主题的详细说明: 首先,我们要了解Socket的基本概念。Socket在计算机网络中扮演着桥梁的...
**基于WCF多线程的SOCKET文件传输服务** 在软件开发中,文件传输是一个常见的需求,尤其是在分布式系统和网络应用程序中。WCF(Windows Communication Foundation)是微软提供的一种全面的面向服务的架构,用于构建...
本篇文章将深入探讨如何利用C++在Linux下实现Socket文件传输。 首先,我们需要了解Socket的基本概念。Socket可以看作是两台计算机之间通信的端点,它提供了低级别的网络I/O接口。在Linux中,我们通常使用`socket()`...
通过阅读和理解这些资源,开发者可以更好地掌握Socket文件传输,尤其是大文件和断点续传的实现细节。 总的来说,Socket文件传输在VS2003环境下为开发者提供了强大的工具,通过合理的设计和优化,可以高效、可靠地...
标题中的“socket文件传输程序(用fopen)”是指一个使用了socket编程接口,并结合fopen函数进行文件传输的应用程序。在计算机网络编程中,socket是实现进程间通信的重要工具,而fopen则是C语言中用于打开和读写文件...
1服务端接收文件,客户端发送文件。 2 每个Socket连接同时只能够传输一个文件。 3 可同时发送网络消息 网络消息的消息格式为: @+nnnnn+消息内容,其中@为消息头,nnnnn为消息...-24 -24 接收方出错,文件传输被取消
总结,Linux下的Socket文件传输涉及TCP连接的建立、文件的读写操作以及Socket API的使用。这种机制灵活且强大,适用于各种网络环境,包括标准PC和嵌入式系统。在实际开发中,需要结合具体需求,充分考虑性能、安全和...
"aio"(Asynchronous Input/Output)方式的socket文件传输是一种高效、非阻塞的通信模式,它利用异步I/O模型来提高系统性能。本文将深入探讨aio方式的socket文件传输及其在客户端和服务器端的应用。 首先,我们需要...
本项目"简单socket文件传输(类似FTP)客户端"旨在实现一个简单的文件传输功能,模仿了FTP(File Transfer Protocol)协议的部分特性,如断点续传和多线程处理,以提高文件传输的效率和可靠性。 1. **Socket基础知识*...
至于"tcp文件传输"和"socket文件传输"标签,它们强调了使用TCP协议和Socket编程接口进行文件传输。这两个概念经常一起使用,因为TCP是Socket通信的基础协议,而Socket是实现TCP通信的应用层接口。 在"Socket_File_...
在实际应用中,Socket文件传输可能需要考虑更多因素,如错误处理、断点续传、多线程支持、安全加密(如SSL/TLS)、文件完整性校验等。同时,"$9 协议的),8;网络编程"这部分描述可能是指自定义的通信协议或者某种特定...
"vcSocketfile.rar_VC文件传输_socket传输文件_socket文件传输_vc 多线程_多线程传输"这个压缩包文件提供了使用VC++(Visual C++)实现的多线程Socket文件传输的示例代码。下面我们将详细探讨这个主题中的关键知识点...
"多线程socket文件传输"是一个常见的应用场景,特别是在大数据交换、文件共享等需求中。本项目使用C语言实现了一个非阻塞的多线程socket文件传输程序,尽管可能存在一些问题,但对初学者来说,它能提供宝贵的实践...