- 浏览: 174390 次
- 性别:
- 来自: 山东菏泽
文章分类
最新评论
-
yqfly2008:
对于某个值修改两次或以上后,仍然和最初的值相同,这样能判断出来 ...
Jquery判断表单是否修改 -
liujiejk520:
重新编译了,问题解决了,呵,不用麻烦你了。我真是个冒失鬼不好意 ...
asp+asp.net HttpHandler 头像截图(asp头像截图) -
liujiejk520:
我下了asp版的在升级了jquery-1.6后图片不能旋转了, ...
asp+asp.net HttpHandler 头像截图(asp头像截图) -
kqy929:
Hi,非常感谢你这篇文章,照你说的,我也部署好coreseek ...
ubuntu910下安装coreseek中文全文索引 -
zhiye:
请问这个问题有得解吗?谢谢
http://www.iteye. ...
javascript滚动类
using System; using System.Net; using System.Net.Sockets; using System.IO; namespace Win { /// <summary> /// Net : 提供静态方法,对常用的网络操作进行封装 /// </summary> public sealed class Net { private Net() { } /// <summary> /// 连接使用 tcp 协议的服务端 /// </summary> /// <param name="ip">服务端的ip地址</param> /// <param name="port">服务端的端口号</param> /// <returns></returns> public static Socket ConnectServer(string ip, int port) { Socket s = null; try { IPAddress ipAddress = IPAddress.Parse(ip); IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, port); s = new Socket(ipEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); s.Connect(ipEndPoint); if (s.Connected == false) { s = null; } } catch (Exception e) { Log.WriteLog(e); } return s; } /// <summary> /// 用主机名称连接使用Tcp协议的服务端 /// </summary> /// <param name="hostName">在hosts 文件中存在的主机名称</param> /// <param name="port">服务端的端口号</param> /// <returns></returns> public static Socket ConnectServByHostName(string hostName, int port) { Socket s = null; IPHostEntry iphe = null; try { iphe = Dns.Resolve(hostName); foreach (IPAddress ipad in iphe.AddressList) { IPEndPoint ipe = new IPEndPoint(ipad, port); Socket tmps = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp); tmps.Connect(ipe); if (tmps.Connected) { s = tmps; break; } else continue; } } catch (Exception e) { Log.WriteLog(e); } return s; } /// <summary> /// 向远程主机发送数据 /// </summary> /// <param name="socket">要发送数据且已经连接到远程主机的 Socket</param> /// <param name="buffer">待发送的数据</param> /// <param name="outTime">发送数据的超时时间,以秒为单位,可以精确到微秒</param> /// <returns>0:发送数据成功;-1:超时;-2:发送数据出现错误;-3:发送数据时出现异常</returns> /// <remarks > /// 当 outTime 指定为-1时,将一直等待直到有数据需要发送 /// </remarks> public static int SendData(Socket socket, byte[] buffer, int outTime) { if (socket == null || socket.Connected == false) { throw new ArgumentException("参数socket 为null,或者未连接到远程计算机"); } if (buffer == null || buffer.Length == 0) { throw new ArgumentException("参数buffer 为null ,或者长度为 0"); } int flag = 0; try { int left = buffer.Length; int sndLen = 0; while (true) { if ((socket.Poll(outTime * 1000000, SelectMode.SelectWrite) == true)) { // 收集了足够多的传出数据后开始发送 sndLen = socket.Send(buffer, sndLen, left, SocketFlags.None); left -= sndLen; if (left == 0) { // 数据已经全部发送 flag = 0; break; } else { if (sndLen > 0) { // 数据部分已经被发送 continue; } else { // 发送数据发生错误 flag = -2; break; } } } else { // 超时退出 flag = -1; break; } } } catch (SocketException e) { Log.WriteLog(e); flag = -3; } return flag; } /// <summary> /// 向远程主机发送数据 /// </summary> /// <param name="socket">要发送数据且已经连接到远程主机的 Socket</param> /// <param name="buffer">待发送的字符串</param> /// <param name="outTime">发送数据的超时时间,以秒为单位,可以精确到微秒</param> /// <returns>0:发送数据成功;-1:超时;-2:发送数据出现错误;-3:发送数据时出现异常</returns> /// <remarks > /// 当 outTime 指定为-1时,将一直等待直到有数据需要发送 /// </remarks> public static int SendData(Socket socket, string buffer, int outTime) { if (buffer == null || buffer.Length == 0) { throw new ArgumentException("待发送的字符串长度不能为零."); } return (SendData(socket, System.Text.Encoding.Default.GetBytes(buffer), outTime)); } /// <summary> /// 接收远程主机发送的数据 /// </summary> /// <param name="socket">要接收数据且已经连接到远程主机的 socket</param> /// <param name="buffer">接收数据的缓冲区</param> /// <param name="outTime">接收数据的超时时间,以秒为单位,可以精确到微秒</param> /// <returns>0:接收数据成功;-1:超时;-2:接收数据出现错误;-3:接收数据时出现异常</returns> /// <remarks > /// 1、当 outTime 指定为-1时,将一直等待直到有数据需要接收; /// 2、需要接收的数据的长度,由 buffer 的长度决定。 /// </remarks> public static int RecvData(Socket socket, byte[] buffer, int outTime) { if (socket == null || socket.Connected == false) { throw new ArgumentException("参数socket 为null,或者未连接到远程计算机"); } if (buffer == null || buffer.Length == 0) { throw new ArgumentException("参数buffer 为null ,或者长度为 0"); } buffer.Initialize(); int left = buffer.Length; int curRcv = 0; int flag = 0; try { while (true) { if (socket.Poll(outTime * 1000000, SelectMode.SelectRead)) { // 已经有数据等待接收 curRcv = socket.Receive(buffer, curRcv, left, SocketFlags.None); left -= curRcv; if (left == 0) { // 数据已经全部接收 flag = 0; break; } else { if (curRcv > 0) { // 数据已经部分接收 continue; } else { // 出现错误 flag = -2; break; } } } else { // 超时退出 flag = -1; break; } } } catch (SocketException e) { Log.WriteLog(e); flag = -3; } return flag; } /// <summary> /// 接收远程主机发送的数据 /// </summary> /// <param name="socket">要接收数据且已经连接到远程主机的 socket</param> /// <param name="buffer">存储接收到的数据的字符串</param> /// <param name="bufferLen">待接收的数据的长度</param> /// <param name="outTime">接收数据的超时时间,以秒为单位,可以精确到微秒</param> /// <returns>0:接收数据成功;-1:超时;-2:接收数据出现错误;-3:接收数据时出现异常</returns> /// <remarks > /// 当 outTime 指定为-1时,将一直等待直到有数据需要接收; /// </remarks> public static int RecvData(Socket socket, string buffer, int bufferLen, int outTime) { if (bufferLen <= 0) { throw new ArgumentException("存储待接收数据的缓冲区长度必须大于0"); } byte[] tmp = new byte[bufferLen]; int flag = 0; if ((flag = RecvData(socket, tmp, outTime)) == 0) { buffer = System.Text.Encoding.Default.GetString(tmp); } return flag; } /// <summary> /// 向远程主机发送文件 /// </summary> /// <param name="socket" >要发送数据且已经连接到远程主机的 socket</param> /// <param name="fileName">待发送的文件名称</param> /// <param name="maxBufferLength">文件发送时的缓冲区大小</param> /// <param name="outTime">发送缓冲区中的数据的超时时间</param> /// <returns>0:发送文件成功;-1:超时;-2:发送文件出现错误;-3:发送文件出现异常;-4:读取待发送文件发生错误</returns> /// <remarks > /// 当 outTime 指定为-1时,将一直等待直到有数据需要发送 /// </remarks> public static int SendFile(Socket socket, string fileName, int maxBufferLength, int outTime) { if (fileName == null || maxBufferLength <= 0) { throw new ArgumentException("待发送的文件名称为空或发送缓冲区的大小设置不正确."); } int flag = 0; try { FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); long fileLen = fs.Length; // 文件长度 long leftLen = fileLen; // 未读取部分 int readLen = 0; // 已读取部分 byte[] buffer = null; if (fileLen <= maxBufferLength) { /* 文件可以一次读取*/ buffer = new byte[fileLen]; readLen = fs.Read(buffer, 0, (int)fileLen); flag = SendData(socket, buffer, outTime); } else { /* 循环读取文件,并发送 */ buffer = new byte[maxBufferLength]; while (leftLen != 0) { readLen = fs.Read(buffer, 0, maxBufferLength); if ((flag = SendData(socket, buffer, outTime)) < 0) { break; } leftLen -= readLen; } } fs.Close(); } catch (IOException e) { Log.WriteLog(e); flag = -4; } return flag; } /// <summary> /// 向远程主机发送文件 /// </summary> /// <param name="socket" >要发送数据且已经连接到远程主机的 socket</param> /// <param name="fileName">待发送的文件名称</param> /// <returns>0:发送文件成功;-1:超时;-2:发送文件出现错误;-3:发送文件出现异常;-4:读取待发送文件发生错误</returns> public static int SendFile(Socket socket, string fileName) { return SendFile(socket, fileName, 2048, 1); } /// <summary> /// 接收远程主机发送的文件 /// </summary> /// <param name="socket">待接收数据且已经连接到远程主机的 socket</param> /// <param name="fileName">保存接收到的数据的文件名</param> /// <param name="fileLength" >待接收的文件的长度</param> /// <param name="maxBufferLength">接收文件时最大的缓冲区大小</param> /// <param name="outTime">接受缓冲区数据的超时时间</param> /// <returns>0:接收文件成功;-1:超时;-2:接收文件出现错误;-3:接收文件出现异常;-4:写入接收文件发生错误</returns> /// <remarks > /// 当 outTime 指定为-1时,将一直等待直到有数据需要接收 /// </remarks> public static int RecvFile(Socket socket, string fileName, long fileLength, int maxBufferLength, int outTime) { if (fileName == null || maxBufferLength <= 0) { throw new ArgumentException("保存接收数据的文件名称为空或发送缓冲区的大小设置不正确."); } int flag = 0; try { FileStream fs = new FileStream(fileName, FileMode.Create); byte[] buffer = null; if (fileLength <= maxBufferLength) { /* 一次读取所传送的文件 */ buffer = new byte[fileLength]; if ((flag = RecvData(socket, buffer, outTime)) == 0) { fs.Write(buffer, 0, (int)fileLength); } } else { /* 循环读取网络数据,并写入文件 */ int rcvLen = maxBufferLength; long leftLen = fileLength; //剩下未写入的数据 buffer = new byte[rcvLen]; while (leftLen != 0) { if ((flag = RecvData(socket, buffer, outTime)) < 0) { break; } fs.Write(buffer, 0, rcvLen); leftLen -= rcvLen; rcvLen = (maxBufferLength < leftLen) ? maxBufferLength : ((int)leftLen); } } fs.Close(); } catch (IOException e) { Log.WriteLog(e); flag = -4; } return flag; } /// <summary> /// 接收远程主机发送的文件 /// </summary> /// <param name="socket">待接收数据且已经连接到远程主机的 socket</param> /// <param name="fileName">保存接收到的数据的文件名</param> /// <param name="fileLength" >待接收的文件的长度</param> /// <returns>0:接收文件成功;-1:超时;-2:接收文件出现错误;-3:接收文件出现异常;-4:写入接收文件发生错误</returns> public static int RecvFile(Socket socket, string fileName, long fileLength) { return RecvFile(socket, fileName, fileLength, 2048, 1); } } }
简单Tcp通讯,文件传输
发表评论
-
asp+asp.net HttpHandler 头像截图(asp头像截图)
2010-07-29 11:53 2227碰到网友问能不能帮他解决ASP下的网站用户会员截图,网上找了下 ... -
eclipse和xdebug调试PHP配置方法
2010-07-09 11:42 3133工欲善其事必先利其器,要想写好好的程序,不光要有好的思想,好的 ... -
UltraEdit的正则表达式查找和替换
2009-12-01 15:28 2972Ultraedit在使用正则表达式进行查找替换时有 ... -
又一次迷茫了
2009-11-10 14:46 909前段时间接手的.NET项目做完了 现在想学下开源的东西.鄙视 ... -
PowerDesigner设置集锦
2009-09-27 10:26 2389powerdesiner的自增长列 1.如果dbms是M ... -
C#加密解密文件
2009-06-19 15:34 2639using System; using System.IO; ... -
XML、XSLT实现三级菜单
2009-02-20 13:26 1267套用别人的样式自己改的 代码和效果见附件 此 ... -
asp.net中VML图表控件
2009-01-14 16:13 2366最近老是用到报表的东西 找到些JS的看写的还不错 就自己弄了一 ... -
SQL中的split
2009-01-14 16:08 1441CREATE function FGet_StrArraySt ... -
DotNet 实现Zip 解压缩文件(可压缩文件或文件夹)
2008-12-26 13:04 2988做东西时用到的 使用ICSharpCode.SharpZipL ... -
Installshield2008使用心得(打包web工程)
2008-12-15 11:59 24271.新建InstallScript Project 2.在P ... -
批处理执行SQL脚本文件
2008-12-09 11:59 1851前些日子做的一个OA 安装时是用的MSDE,附加数据库时找到了 ... -
批处理创建IIS虚拟目录
2008-12-05 11:15 2248前段时间做一个OA,做SETUP时用到了这个 现在贴出来和大家 ... -
感觉不错
2008-12-03 09:22 899很多朋友都开始写Blog了 我以前也注册过很多,不过老感觉不 ...
相关推荐
你可以通过编译和运行这两个项目,来实践TCP文件传输的过程。 在实际应用中,为了提高效率和用户体验,可以考虑使用异步编程模型,例如使用BeginAcceptTcpClient/EndAcceptTcpClient和BeginSend/EndReceive等异步...
本篇将深入探讨C# TCP文件传输的相关知识点,以及如何在Visual Studio 2010环境下使用C# .NET 4.0实现一个简单的图片传输应用。 首先,TCP是一种面向连接的、可靠的传输协议,它确保数据包按照正确的顺序到达目的地...
在C#编程语言中,利用Socket API进行TCP通信可以构建高效、稳定的文件传输系统,特别是在处理大文件时,断点续传功能则显得尤为必要。下面,我们将深入探讨如何使用C#的Socket实现TCP大文件传输并支持断点续传。 ...
本资源提供的"C# TCP文件传输程序源码"是一个基于C# 2010开发的实例,旨在帮助开发者理解如何利用C#进行TCP文件传输的编程。 首先,TCP协议保证了数据的可靠传输,通过三次握手建立连接,确保双方都准备好进行通信...
在提供的压缩包文件`TcpTransportFileTest`中,可能包含了一个完整的C# TCP文件传输示例,包括客户端和服务器端的代码实现,供学习和参考。通过研究这个示例,你可以更深入地理解以上所述的概念和技术。
最简单的方式实现文件传输 里面有详细的注释 分别分为2部分 一部分是发送方 另外一部分是接收方 接收方是控制台模式实现的 节省了很多不必要的代码 默认文件存放地址为c:\ 根目录下 只能传输单个文件 不能传输...
【标签】"C#TCP图像"进一步强调了技术重点,即使用C#语言处理TCP协议传输图像。C#作为.NET框架的主要开发语言,拥有丰富的类库支持网络通信,例如System.Net命名空间下的Socket类,可以方便地实现TCP通信。 在...
总结来说,C#的TCP通信涉及客户端和服务端的建立连接、数据传输以及文件传输等核心步骤。开发者需要理解TCP协议的工作原理,并熟练运用C#提供的网络编程API,才能实现高效、稳定的网络通信系统。在实际项目中,还应...
本文将深入探讨如何使用C#编程语言结合TCP协议来实现摄像头的图像和视频传输。 首先,TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它确保了数据包在传输过程中的...
在C#编程环境中,开发基于TCP协议的文件传输软件是一项常见的任务,这通常涉及到使用`TcpClient`和`TcpListener`类以及网络流的概念。这两个类是.NET Framework提供的,用于实现客户端和服务器之间的TCP通信。下面...
在C#中,实现TCP文件传输通常涉及到以下关键知识点: 1. **Socket类**:C#中的System.Net.Sockets命名空间提供了Socket类,它是网络通信的基础,可以用来创建TCP连接。通过调用Socket的Connect方法连接到服务器,...
在压缩包中的`SocketDemo`项目中,应该包含了实现这个功能的C#代码示例,你可以参考其中的`Server`和`Client`类,理解并学习如何使用Socket进行文件传输。通过实际操作,你会更深入地掌握C# Socket通信的核心技巧。
以下是一个简单的C# TCP Socket分包接收数据的步骤: 1. **创建Socket对象**:首先,创建一个Socket对象,并指定协议类型(如IPv4或IPv6)和套接字类型(Stream表示TCP)。 ```csharp var socket = new Socket...
2. 文件传输的实现:文件传输部分使用了TCP协议的Socket通信。通过TCP连接,客户端和服务端可以发送和接收文件。传输文件之前,会通过传输消息来通知对方要传输的文件名称和大小。 3. TcpHelper类库:作者构建了一...
在本文中,我们将深入探讨如何使用C#进行TCP文件传输,特别关注WinForm应用程序的实现。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,广泛应用于网络编程,包括文件...
本项目聚焦于使用C#实现基于TCP协议的文件传输和聊天功能,这是一个基础且实用的技术应用场景。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,确保了数据的完整性和...
标题中的"C# Socket Tcp文件传输和文字聊天系统"是指使用C#编程语言,基于Socket和TCP协议实现的一个功能,它涵盖了文件传输和文字聊天两大功能。Socket是网络通信中的一个基本概念,它允许两个网络应用进行数据交换...