- 浏览: 170264 次
- 性别:
- 来自: 山东菏泽
文章分类
最新评论
-
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 2164碰到网友问能不能帮他解决ASP下的网站用户会员截图,网上找了下 ... -
eclipse和xdebug调试PHP配置方法
2010-07-09 11:42 3086工欲善其事必先利其器,要想写好好的程序,不光要有好的思想,好的 ... -
UltraEdit的正则表达式查找和替换
2009-12-01 15:28 2891Ultraedit在使用正则表达式进行查找替换时有 ... -
又一次迷茫了
2009-11-10 14:46 869前段时间接手的.NET项目做完了 现在想学下开源的东西.鄙视 ... -
PowerDesigner设置集锦
2009-09-27 10:26 2333powerdesiner的自增长列 1.如果dbms是M ... -
C#加密解密文件
2009-06-19 15:34 2582using System; using System.IO; ... -
XML、XSLT实现三级菜单
2009-02-20 13:26 1225套用别人的样式自己改的 代码和效果见附件 此 ... -
asp.net中VML图表控件
2009-01-14 16:13 2314最近老是用到报表的东西 找到些JS的看写的还不错 就自己弄了一 ... -
SQL中的split
2009-01-14 16:08 1377CREATE function FGet_StrArraySt ... -
DotNet 实现Zip 解压缩文件(可压缩文件或文件夹)
2008-12-26 13:04 2906做东西时用到的 使用ICSharpCode.SharpZipL ... -
Installshield2008使用心得(打包web工程)
2008-12-15 11:59 23451.新建InstallScript Project 2.在P ... -
批处理执行SQL脚本文件
2008-12-09 11:59 1810前些日子做的一个OA 安装时是用的MSDE,附加数据库时找到了 ... -
批处理创建IIS虚拟目录
2008-12-05 11:15 2210前段时间做一个OA,做SETUP时用到了这个 现在贴出来和大家 ... -
感觉不错
2008-12-03 09:22 824很多朋友都开始写Blog了 我以前也注册过很多,不过老感觉不 ...
相关推荐
C#通过TCP传输文件,包含服务端与客户端
C# socket TCP 大文件传输同时实现断点续传
客户端每隔一定间隔发送一个图片文件,服务器端接收图片后显示在窗体上。 VS2010 C# .NET4.0下编译通过
C#2010编写的TCP文件传输程序源码,有需要的下载
最简单的方式实现文件传输 里面有详细的注释 分别分为2部分 一部分是发送方 另外一部分是接收方 接收方是控制台模式实现的 节省了很多不必要的代码 默认文件存放地址为c:\ 根目录下 只能传输单个文件 不能传输...
有C#写的利用Soket Tcp传输文件的实例,带有时间统计和滚动条,如有疑问,请联系QQ:78499261
基于C# TCP 的摄像头的图像视频传输
C#Socket文件传输,将文件名和文件保存到一个byte[]中传输,再通过解析获取文件名和文件保存到本地文件夹中
简单C#_Tcp文件传输.doc 主要给学习文件传输的同学使用。
C# TCP Socket 分包传送数据,这个代码也是从别的地方淘来的,用的还不错。
C#TCP通信,通过IP地址,TCP协议实现了数据的发送与接收,并且实现了文件的传输。
C#开发人员面向TCP Scoket编程入门实例
C#TCP发送消息和传输文件,学习网络编程的可以看一下
c#开发的winform应用程序,基于tcp的文件传输demo,分服务器端和客户端,仅供学习和参考。
资源简单易懂有用欢迎大家踊跃下载,花了不少时间完成的
这是一个C#编写的,基于TCP实现的文件传输程序,包含一个客户端和一个服务端能实现小文件的传输,注意我的代码中设置的文件长度较小所以只能传输小文件。对于大文件的传输可以将一个文件分割为若干份,分别传输然后...
主要为大家详细介绍了C#中TCP粘包问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
基于TCP协议传输文字消息和文件,分为服务器和客户端两个部分