- 浏览: 72938 次
- 性别:
- 来自: 厦门
最新评论
-
BlueBing:
linyuliang 写道BlueBing 写道我想再做些修改 ...
IBatis Abator去除注释版 -
linyuliang:
BlueBing 写道我想再做些修改 可否提供下源码呢晚上我回 ...
IBatis Abator去除注释版 -
linyuliang:
xiaohu7924 写道为什么我用这个生成的名字不是你说的驼 ...
IBatis Abator去除注释版 -
xiaohu7924:
为什么我用这个生成的名字不是你说的驼锋名字,还是老样子
IBatis Abator去除注释版 -
BlueBing:
我想再做些修改 可否提供下源码呢
IBatis Abator去除注释版
上面介绍了通讯的基类,下面就是使用那个类进行发送和接收的部分:
二、发送部分:
发送咱们使用了多线程,可以同时进行多个任务,比如发送文件、发送文本等,互不影响:
发送文本方法:
private void StartSendText(string strHost,int iPort,string strInfo)
{
SendText stText = new SendText(strHost,iPort,strInfo,new CommunClass.OnSend(OnSendDrawProgress)) ;
StartThread(new ThreadStart(stText.Send)) ;
}
下面是他调用用到的一些方法:
开始一个线程
private void StartThread(ThreadStart target)
{
Thread doStep = new Thread(target) ;
doStep.IsBackground = true ;
doStep.Start() ;
}
发送一部分(本文设置的是1024字节)成功后的回调方法
public void OnSendDrawProgress(int iTotal,int iSending)
{
if (iTotal != pbMain.Maximum)
pbMain.Maximum = iTotal ;
pbMain.Value = iSending ;
}
因为使用的是线程,所以发送文本使用的是一个发送文本类的方法,该类如下:
public class SendText
{
private string Host ;
private int Port ;
private string Info ;
private CommunClass.OnSend onsend ;
public SendText(string strHost,int iPort,string strInfo,
CommunClass.OnSend onSend)
{
Host = strHost ;
Port = iPort ;
Info = strInfo ;
onsend = onSend ;
}
public void Send()
{
Socket s = null ;
try
{
s = CommunClass.ConnectToServer(Host,Port) ;
CommunClass.WriteCommandToSocket(s,"SENDTEXT") ;
CommunClass.WriteCommandDescToSocket(s,"") ;
CommunClass.WriteDynamicTextToSocket(s,Info,onsend) ;
}
catch (Exception e)
{
MessageBox.Show(e.Message) ;
}
finally
{
if (s != null)
s.Close() ;
}
}
}//end class
这样就可以使用一个线程发送文本了。
发送文件的方法也类似:
private void StartSendFile(string strHost,int iPort,string strFile)
{
SendFile sfFile = new SendFile(strHost,iPort,strFile,this.pbMain) ;
pbMain.Value = 0 ;
StartThread(new ThreadStart(sfFile.Send)) ;
}
发送文件的类:
public class SendFile
{
private string Host ;
private int Port ;
private string FileToSend ;
private ProgressBar pbar;
public SendFile(string strHost,int iPort,string strFile,ProgressBar pbMain)
{
Host = strHost ;
Port = iPort ;
FileToSend = strFile ;
pbar = pbMain ;
}
public void Send()
{
Socket s = null ;
try
{
s = CommunClass.ConnectToServer(Host,Port) ;
CommunClass.WriteCommandToSocket(s,"SENDFILE") ;
CommunClass.WriteCommandDescToSocket(s,"") ;
CommunClass.WriteFileToSocket(s,FileToSend,new CommunClass.OnSend(OnSendDrawProgress)) ;
}
catch (Exception e)
{
MessageBox.Show(e.Message) ;
}
finally
{
if (s != null)
s.Close() ;
}
}<!----><o:p></o:p>
public void OnSendDrawProgress(int iTotal,int iSending)
{
if (iTotal != pbar.Maximum)
pbar.Maximum = iTotal ;
pbar.Value = iSending ;
}
}//end class
当然,你发送一个命令让服务器端启动一个程序(靠,这不成木马了吗?)也可以:
俺这里只给出一部分代码,其余的您自己可以发挥以下:
public class ExeCuteFile
{
private string Host ;
private int Port ;
private string FileName ;
private string cmdParam ;
public ExeCuteFile(string strHost,int iPort,string strFileName,string strCmdParam)
{
Host = strHost ;
Port = iPort ;
FileName = strFileName ;
cmdParam = strCmdParam ;
}
public void Send()
{
Socket s = null ;
try
{
s = CommunClass.ConnectToServer(Host,Port) ;
CommunClass.WriteCommandToSocket(s,"EXECUTEFILE") ;
CommunClass.WriteCommandDescToSocket(s,FileName) ;
CommunClass.WriteDynamicTextToSocket(s,"",null) ;
MessageBox.Show(CommunClass.ReadDynamicTextFromSocket(s)) ;
}
catch (Exception e)
{
MessageBox.Show(e.Message) ;
}
finally
{
if (s != null)
s.Close() ;
}
}
}
三、下面是服务器端接受信息的代码:
创建监听:
/// <summary>
/// 再给定的主机和端口上创建监听程序
/// </summary>
/// <param name="strAddress"></param>
/// <param name="iPort"></param>
private void BuildingServer(string strAddress,int iPort)
{
IPAddress ipAddress = Dns.Resolve(strAddress).AddressList[0];
try
{
listener = new TcpListener(ipAddress, iPort);
}
catch ( Exception e)
{
AddInfo(e.Message) ;
}
}
开始监听:
/// <summary>
/// 开始监听
/// </summary>
private void StartListen()
{
bool done = false;
listener.Start();
while (!done)
{
Socket s = listener.AcceptSocket() ;
if(s != null)
{
DealWithSocket dws = new DealWithSocket(s,this.tbLog) ;
StartThread(new ThreadStart(dws.DealWith)) ;
}
}
}
private void StartThread(ThreadStart target)
{
Thread doStep = new Thread(target) ;
doStep.IsBackground = true ;
doStep.Start() ;
}
开始监听后,对于每一个监听到的客户端的连接都用一个单独的线程来处理,处理通过类DealWithSocket来完成,下面是类代码:
public class DealWithSocket
{
private Socket s = null ;
private TextBox tbLog = null ;
public DealWithSocket(Socket newSocket,TextBox tbInfo)
{
s = newSocket ;
tbLog = tbInfo ;
}
public void DealWith()
{
string strCmd = CommunClass.ReadCommandFromSocket(s) ;
string strDesc = CommunClass.ReadCommandDescFromSocket(s) ;
AddInfo(strCmd) ;
switch(strCmd)
{
case "SENDFILE" :
CommunClass.ReadDynamicFileFromSocket(s,"e:\\rrr.txt") ;
break ;
case "EXECUTEFILE" :
string strParam = CommunClass.ReadDynamicTextFromSocket(s) ;
string strResult = ExeCuteFile(strDesc,strParam) ;
CommunClass.WriteDynamicTextToSocket(s,strResult,null) ;
break ;
default:
string strDetail = CommunClass.ReadDynamicTextFromSocket(s) ;
AddInfo(strDetail) ;
break ;
}
try
{
s.Close() ;
}
catch (Exception e)
{
AddInfo(e.Message) ;
}
}
private void AddInfo(string strInfo)
{
string Info = DateTime.Now.ToLongTimeString() + " "+ strInfo +"\r\n" ;
tbLog.Text += Info ;
tbLog.Refresh() ;
}
private string ExeCuteFile(string strFileName,string strCmdParam)
{
System.Diagnostics.Process proc = new System.Diagnostics.Process() ;
proc.StartInfo.FileName = strFileName ;
proc.StartInfo.Arguments = strCmdParam ;
try
{
proc.Start() ;
return "OK" ;
}
catch(Exception err)
{<o:p></o:p>
return err.Message ;
}
}
}//end class
以上就是所用的代码,希望大家批判指正.
发表评论
-
实现GridView控件的删除多条记录功能系列(1)
2005-08-10 14:15 1450在Asp.Net 2.0中新增的控件GridView可 ... -
实现GridView控件的删除多条记录功能系列(2)
2005-08-10 14:55 1299在上一篇中,我们已经开发了需要的CheckBox控件, ... -
实现GridView控件的删除多条记录功能系列(3)
2005-08-11 12:18 1321本篇将讲述如何解决GridView控件中使用Check ... -
[转]C#正则表达式小结
2007-09-24 11:38 1209地址: http://www.cnblogs.co ... -
[转]全面剖析C#正则表达式
2007-09-24 11:41 1377地址:http://fineboy.cnblogs.com/ ... -
(转贴)VS.NET下水晶报表分发时的问题及解决
2007-10-18 17:27 1168一、载入报表时报错 ... -
(转贴)图解使用VS.NET部署含水晶报表的网站
2007-10-18 17:56 2126Crystal Report ,中文名称“水晶报表”,因为做报 ... -
[转]VS2005 web程序自定义安装包的制作
2007-10-23 10:28 2113利用VS2005的“Web安装项目”建立安装包很难对安装过程进 ... -
[转]使用C#进行点对点通讯和文件传输(通讯基类部分)
2007-10-24 10:59 906最近一个项目要用到点对点文件传输,俺就到处找资料写程序,最后终 ... -
[转载]C#中串口通信编程
2007-10-24 11:01 4502原文及源代码位置:http://bbs.msproject.c ... -
[转]C#多线程编程实例实战
2007-10-24 11:02 1667单个写入程序/多个阅读程序在.Net类库中其实已经提供了实现, ... -
[转]实现同时只允许运行一个程序实例
2007-10-24 11:06 1128方法一: /// <summary> /// 从这 ... -
[转]IIS虚拟目录控制类
2007-10-24 11:08 447using System;using System.Data; ... -
[转]C# 调用API,实现注销远程登录本机的用户
2007-10-24 11:08 1841using System;using System.Manag ... -
[转]C#的usb通讯编程
2007-10-24 11:10 2810using System;using System.Colle ... -
[转]IIS站点管理类
2007-10-24 11:10 949using System;using System.Colle ... -
[转]使用.NET实现断点续传
2007-10-24 11:11 1319断点续传的原理 在了解HTTP断点续传的原理之前,先来说说HT ... -
[转]Datagridview 实现二维表头
2007-10-26 16:42 2338最近把我们的b/s系统,增加智能客户端的功能。确实智能客户端是 ... -
[转]Web项目下NHibernate的Session管理的解决方案
2007-11-07 10:47 3390NHibernate的Session的管理一直是个问题,在系统 ... -
[转] NHibernate对像版本控制使用示例
2007-11-07 10:49 1252<version name="Version& ...
相关推荐
### 使用C#进行点对点通讯和文件传输 在现代软件开发中,点对点(P2P)通信和文件传输是一项重要的技术,特别是在需要直接建立客户端之间连接的应用场景下。本文将详细介绍如何使用C#语言实现点对点通信及文件传输...
在C#中实现点对点文件传输涉及到网络编程和流处理等核心概念。以下将详细介绍整个实现过程。 首先,为了建立点对点连接,我们需要创建一个Socket对象来处理TCP/IP通信。在C#中,可以使用`System.Net.Sockets.Socket...
在进行文件传输时,通常会使用TCP协议的点对点传输,即客户端与服务端之间建立连接后,进行数据的发送与接收。TCP的这种连接保证了数据传输的可靠性,它会通过确认应答、重发、流量控制和拥塞控制等机制来确保数据的...
总结,"C#点对点通讯源码"涉及了C#网络编程的多个核心概念和技术,包括套接字、多线程、数据序列化、编码解码、错误处理以及网络事件处理等。通过理解这些知识点,开发者能够构建出稳定、高效的点对点通信系统。
这个“C#点对点文件传输”项目可能包含了实现这一技术的具体代码示例。 在C#中实现P2P文件传输,通常会涉及到以下几个关键知识点: 1. **网络编程基础**:理解套接字(Sockets)是至关重要的,它是进行网络通信的...
这个项目是一个实用的C#学习实例,涵盖了网络编程和文件操作的关键知识点,对于理解和实践C#的网络应用开发具有很高的价值。通过这个项目,开发者可以深入理解TCP通信的工作原理,同时提升文件操作的能力。
以上就是使用C# Socket进行TCP大文件传输并实现断点续传的基本步骤和关键知识点。在实际开发中,还需要根据项目需求和环境调整策略,比如增加缓存管理、流量控制等,以提升系统性能和用户体验。GY_FileTransfer2.0.3...
通过将文件分割成多个部分,并为每个部分创建一个独立的线程进行发送,可以显著提高传输速度。这种方式充分利用了现代计算机系统的多核优势,使得文件传输效率得到显著提升。 示例代码中的 `startSendFileThread()`...
在IT领域,网络点对点(P2P)通信是一种重要的技术,它允许两台或多台设备之间直接交换数据,而无需...提供的"Visual C#实现网络点对点通讯程序.rar"文件很可能是包含源代码和相关文档的资源,供学习者参考和研究。
本主题聚焦于C# Winform应用中利用Socket进行点对点(P2P)信息传输。Socket编程是网络通信的核心部分,它允许两个或多个设备通过网络交换数据。以下是对这个主题的详细讲解: 1. **C# Socket基础**: C#中的...
C#作为一种功能强大的编程语言,提供了丰富的库和API来处理网络通信和文件操作,使得在局域网内的文件传输变得相对简单。下面将详细介绍如何使用C#实现局域网内的文件传输。 首先,我们需要理解C#中的网络编程基础...
本项目“用C#实现点对点聊天”旨在通过TCP/IP协议创建一个简单的点对点通信系统,使得两个用户能够进行实时聊天。TCP/IP协议是互联网通信的基础,确保了数据的可靠传输。 点对点(P2P)通信模型不同于传统的客户端-...
8. **安全处理**:若采用加密传输,需在发送和接收端进行相应的加密和解密操作。 总的来说,C# UDP通信类文件传输涉及到网络编程、数据分块、确认机制、超时重传等多个复杂概念。开发者需要具备扎实的网络基础和...
C#中的文件传送通常基于TCP/IP协议栈,利用Socket编程来实现数据的发送和接收。 服务器端的实现涉及以下步骤: 1. 创建一个Socket实例,绑定到本地的IP地址和端口,监听来自客户端的连接请求。 2. 当客户端连接后,...
- **WriteLine/ReadLine**: 使用这两个方法可以方便地发送和接收字符串,它们会处理行结束符。 3. **订立协议**: - **自定义协议设计**: 在网络通信中,通常需要定义自己的协议来规范数据交换格式,例如JSON、...
本篇文章将深入探讨如何使用C#进行UDP方式的大文件传输,并通过给出的"UdpClientApp"和"UdpServer"两个文件名称,我们来分析其背后的实现原理和关键知识点。 首先,UDP是一种无连接的传输层协议,它不像TCP那样在...
在本文中,我们将深入探讨如何使用C#编程语言与KUKA机器人进行TCP通信,以实现点位获取和文件传输。KUKA机器人是全球知名的工业机器人制造商,其产品广泛应用于自动化生产线。C#作为微软开发的一种面向对象的编程...
在IT行业中,C#是一种广泛使用的编程语言,...深入研究这个项目,不仅能够提升你的C#编程技巧,还能让你对局域网通信和文件传输有更深入的理解。这对于未来开发类似的应用或者在网络编程领域进一步发展都是很有价值的。
在C#编程中,利用异步Socket实现点对点(P2P)通信是一种常见的网络编程技术,可以创建高效、可扩展的网络应用。异步Socket编程的核心在于它允许程序在执行其他操作的同时处理网络I/O,提高了程序的响应性和整体性能...
C# SerialPort 串口发送与接收数据操作类是指通过使用 C# 语言中的 SerialPort 类来实现串口的发送和接收数据操作。该类提供了完整的串口操作功能,包括串口的打开、关闭、发送数据、接收数据等。 串口操作类 ...