`
hugh-lin
  • 浏览: 72938 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

[转]使用C#进行点对点通讯和文件传输(发送接收部分)

阅读更多

上面介绍了通讯的基类,下面就是使用那个类进行发送和接收的部分:

二、发送部分:

发送咱们使用了多线程,可以同时进行多个任务,比如发送文件、发送文本等,互不影响:

发送文本方法:

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

以上就是所用的代码,希望大家批判指正.

分享到:
评论

相关推荐

    使用C#进行点对点通讯和文件传输

    ### 使用C#进行点对点通讯和文件传输 在现代软件开发中,点对点(P2P)通信和文件传输是一项重要的技术,特别是在需要直接建立客户端之间连接的应用场景下。本文将详细介绍如何使用C#语言实现点对点通信及文件传输...

    C#实现点对点文件传输

    在C#中实现点对点文件传输涉及到网络编程和流处理等核心概念。以下将详细介绍整个实现过程。 首先,为了建立点对点连接,我们需要创建一个Socket对象来处理TCP/IP通信。在C#中,可以使用`System.Net.Sockets.Socket...

    C#TCP发送消息和传输文件

    在进行文件传输时,通常会使用TCP协议的点对点传输,即客户端与服务端之间建立连接后,进行数据的发送与接收。TCP的这种连接保证了数据传输的可靠性,它会通过确认应答、重发、流量控制和拥塞控制等机制来确保数据的...

    C#点对点通讯源码

    总结,"C#点对点通讯源码"涉及了C#网络编程的多个核心概念和技术,包括套接字、多线程、数据序列化、编码解码、错误处理以及网络事件处理等。通过理解这些知识点,开发者能够构建出稳定、高效的点对点通信系统。

    C# 点对点文件传输

    这个“C#点对点文件传输”项目可能包含了实现这一技术的具体代码示例。 在C#中实现P2P文件传输,通常会涉及到以下几个关键知识点: 1. **网络编程基础**:理解套接字(Sockets)是至关重要的,它是进行网络通信的...

    C#版文件发送与接收程序

    这个项目是一个实用的C#学习实例,涵盖了网络编程和文件操作的关键知识点,对于理解和实践C#的网络应用开发具有很高的价值。通过这个项目,开发者可以深入理解TCP通信的工作原理,同时提升文件操作的能力。

    C# socket TCP 大文件传输同时实现断点续传

    以上就是使用C# Socket进行TCP大文件传输并实现断点续传的基本步骤和关键知识点。在实际开发中,还需要根据项目需求和环境调整策略,比如增加缓存管理、流量控制等,以提升系统性能和用户体验。GY_FileTransfer2.0.3...

    C#超大文件发送与接收代码

    通过将文件分割成多个部分,并为每个部分创建一个独立的线程进行发送,可以显著提高传输速度。这种方式充分利用了现代计算机系统的多核优势,使得文件传输效率得到显著提升。 示例代码中的 `startSendFileThread()`...

    Visual C#实现网络点对点通讯程序

    在IT领域,网络点对点(P2P)通信是一种重要的技术,它允许两台或多台设备之间直接交换数据,而无需...提供的"Visual C#实现网络点对点通讯程序.rar"文件很可能是包含源代码和相关文档的资源,供学习者参考和研究。

    C# Winform socket点对点信息传输mode

    本主题聚焦于C# Winform应用中利用Socket进行点对点(P2P)信息传输。Socket编程是网络通信的核心部分,它允许两个或多个设备通过网络交换数据。以下是对这个主题的详细讲解: 1. **C# Socket基础**: C#中的...

    用于局域网内的C#实现文件传输

    C#作为一种功能强大的编程语言,提供了丰富的库和API来处理网络通信和文件操作,使得在局域网内的文件传输变得相对简单。下面将详细介绍如何使用C#实现局域网内的文件传输。 首先,我们需要理解C#中的网络编程基础...

    用C#实现点对点聊天

    本项目“用C#实现点对点聊天”旨在通过TCP/IP协议创建一个简单的点对点通信系统,使得两个用户能够进行实时聊天。TCP/IP协议是互联网通信的基础,确保了数据的可靠传输。 点对点(P2P)通信模型不同于传统的客户端-...

    c#udp通讯类文件传输

    8. **安全处理**:若采用加密传输,需在发送和接收端进行相应的加密和解密操作。 总的来说,C# UDP通信类文件传输涉及到网络编程、数据分块、确认机制、超时重传等多个复杂概念。开发者需要具备扎实的网络基础和...

    C#实现局域网文件传送

    C#中的文件传送通常基于TCP/IP协议栈,利用Socket编程来实现数据的发送和接收。 服务器端的实现涉及以下步骤: 1. 创建一个Socket实例,绑定到本地的IP地址和端口,监听来自客户端的连接请求。 2. 当客户端连接后,...

    C#网络编程:订立协议和发送文件、接收文件、异步传输字符串、同步传输字符串

    - **WriteLine/ReadLine**: 使用这两个方法可以方便地发送和接收字符串,它们会处理行结束符。 3. **订立协议**: - **自定义协议设计**: 在网络通信中,通常需要定义自己的协议来规范数据交换格式,例如JSON、...

    C# udp方式大文件传输

    本篇文章将深入探讨如何使用C#进行UDP方式的大文件传输,并通过给出的"UdpClientApp"和"UdpServer"两个文件名称,我们来分析其背后的实现原理和关键知识点。 首先,UDP是一种无连接的传输层协议,它不像TCP那样在...

    C#获取KUKA机器人点位,和文件传输

    在本文中,我们将深入探讨如何使用C#编程语言与KUKA机器人进行TCP通信,以实现点位获取和文件传输。KUKA机器人是全球知名的工业机器人制造商,其产品广泛应用于自动化生产线。C#作为微软开发的一种面向对象的编程...

    C# 局域网文件传输与聊天程序源码

    在IT行业中,C#是一种广泛使用的编程语言,...深入研究这个项目,不仅能够提升你的C#编程技巧,还能让你对局域网通信和文件传输有更深入的理解。这对于未来开发类似的应用或者在网络编程领域进一步发展都是很有价值的。

    C#中使用异步Socket实现点对点通信

    在C#编程中,利用异步Socket实现点对点(P2P)通信是一种常见的网络编程技术,可以创建高效、可扩展的网络应用。异步Socket编程的核心在于它允许程序在执行其他操作的同时处理网络I/O,提高了程序的响应性和整体性能...

    C# serialport 串口发送与接收数据操作类

    C# SerialPort 串口发送与接收数据操作类是指通过使用 C# 语言中的 SerialPort 类来实现串口的发送和接收数据操作。该类提供了完整的串口操作功能,包括串口的打开、关闭、发送数据、接收数据等。 串口操作类 ...

Global site tag (gtag.js) - Google Analytics