- 浏览: 70331 次
- 性别:
- 来自: 厦门
最新评论
-
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 1379在Asp.Net 2.0中新增的控件GridView可 ... -
实现GridView控件的删除多条记录功能系列(2)
2005-08-10 14:55 1191在上一篇中,我们已经开发了需要的CheckBox控件, ... -
实现GridView控件的删除多条记录功能系列(3)
2005-08-11 12:18 1250本篇将讲述如何解决GridView控件中使用Check ... -
[转]C#正则表达式小结
2007-09-24 11:38 1137地址: http://www.cnblogs.co ... -
[转]全面剖析C#正则表达式
2007-09-24 11:41 1317地址:http://fineboy.cnblogs.com/ ... -
(转贴)VS.NET下水晶报表分发时的问题及解决
2007-10-18 17:27 1115一、载入报表时报错 ... -
(转贴)图解使用VS.NET部署含水晶报表的网站
2007-10-18 17:56 2017Crystal Report ,中文名称“水晶报表”,因为做报 ... -
[转]VS2005 web程序自定义安装包的制作
2007-10-23 10:28 2062利用VS2005的“Web安装项目”建立安装包很难对安装过程进 ... -
[转]使用C#进行点对点通讯和文件传输(通讯基类部分)
2007-10-24 10:59 857最近一个项目要用到点对点文件传输,俺就到处找资料写程序,最后终 ... -
[转载]C#中串口通信编程
2007-10-24 11:01 4410原文及源代码位置:http://bbs.msproject.c ... -
[转]C#多线程编程实例实战
2007-10-24 11:02 1591单个写入程序/多个阅读程序在.Net类库中其实已经提供了实现, ... -
[转]实现同时只允许运行一个程序实例
2007-10-24 11:06 1064方法一: /// <summary> /// 从这 ... -
[转]IIS虚拟目录控制类
2007-10-24 11:08 421using System;using System.Data; ... -
[转]C# 调用API,实现注销远程登录本机的用户
2007-10-24 11:08 1739using System;using System.Manag ... -
[转]C#的usb通讯编程
2007-10-24 11:10 2711using System;using System.Colle ... -
[转]IIS站点管理类
2007-10-24 11:10 869using System;using System.Colle ... -
[转]使用.NET实现断点续传
2007-10-24 11:11 1232断点续传的原理 在了解HTTP断点续传的原理之前,先来说说HT ... -
[转]Datagridview 实现二维表头
2007-10-26 16:42 2289最近把我们的b/s系统,增加智能客户端的功能。确实智能客户端是 ... -
[转]Web项目下NHibernate的Session管理的解决方案
2007-11-07 10:47 3351NHibernate的Session的管理一直是个问题,在系统 ... -
[转] NHibernate对像版本控制使用示例
2007-11-07 10:49 1189<version name="Version& ...
相关推荐
最近做了一个双机备份,就是服务器上有个文件夹,会接收客户端传来的文件,而我们要做的就是同步这台服务器和另一台备用服务器上的文件. 为了实现这个功能我们使用的tcp点对点传输.
同时显示发送密文、接收到的密文、密文解析后的聊天记录,密钥文件可重新生成,还具有文件传输功能。压缩包内包含全部工程文件,用VS2008可直接运行。已进行过单机试验和局域网内两机试验,没有错误。
所以抽时间我重新封装了一个基于UDP的局域网通讯类库,该类库具有局域网内同一网段自我发现及互相注册能力,可以与指定的客户端进行点对点通讯,客户端属于平行关系,无客户端与服务器的关系。 通过此类库,我们...
实例089 点对点聊天程序设计 311 实例090 网络电台 314 第9章 数据库及LINQ技术 实例091 通用数据库连接 319 实例092 读取数据库中的数据表结构 324 实例093 对数据库进行分离、附加、备份及还原操作 ...
实例089 点对点聊天程序设计 311 实例090 网络电台 314 第9章 数据库及LINQ技术 实例091 通用数据库连接 319 实例092 读取数据库中的数据表结构 324 实例093 对数据库进行分离、附加、备份及还原操作 ...
实例089 点对点聊天程序设计 311 实例090 网络电台 314 第9章 数据库及LINQ技术 实例091 通用数据库连接 319 实例092 读取数据库中的数据表结构 324 实例093 对数据库进行分离、附加、备份及还原操作 ...
实例089 点对点聊天程序设计 311 实例090 网络电台 314 第9章 数据库及LINQ技术 实例091 通用数据库连接 319 实例092 读取数据库中的数据表结构 324 实例093 对数据库进行分离、附加、备份及还原操作 ...
实例089 点对点聊天程序设计 311 实例090 网络电台 314 第9章 数据库及LINQ技术 实例091 通用数据库连接 319 实例092 读取数据库中的数据表结构 324 实例093 对数据库进行分离、附加、备份及还原操作 ...
实例089 点对点聊天程序设计 311 实例090 网络电台 314 第9章 数据库及LINQ技术 实例091 通用数据库连接 319 实例092 读取数据库中的数据表结构 324 实例093 对数据库进行分离、附加、备份及还原操作...
通讯记录,查看历史聊天记录和文件发送接收记录 短信中心 1)一对一手机短信发送(中国移动、中国联通手机) 2)手机短信群发(中国移动、中国联通手机) Web客户端 内嵌Web网页浏览 语言版本 1)支持简体中文...
实例089 点对点聊天程序设计 311 实例090 网络电台 314 第9章 数据库及LINQ技术 实例091 通用数据库连接 319 实例092 读取数据库中的数据表结构 324 实例093 对数据库进行分离、附加、备份及还原操作...
实例089 点对点聊天程序设计 311 实例090 网络电台 314 第9章 数据库及LINQ技术 实例091 通用数据库连接 319 实例092 读取数据库中的数据表结构 324 实例093 对数据库进行分离、附加、备份及还原操作...
实例089 点对点聊天程序设计 311 实例090 网络电台 314 第9章 数据库及LINQ技术 实例091 通用数据库连接 319 实例092 读取数据库中的数据表结构 324 实例093 对数据库进行分离、附加、备份及还原操作...
20.3.3 对EXE文件进行加密 20.3.4 解密文件的设置 第21章 视频监控模块 21.1 设计思路 21.2 关键技术 21.2.1 认识视频监控卡 21.2.2 视频监控卡中API函数的使用 21.2.3 Pelco-D协议 21.2.4 串口通信技术 21.2.5 ...
实例089 点对点聊天程序设计 311 实例090 网络电台 314 第9章 数据库及LINQ技术 实例091 通用数据库连接 319 实例092 读取数据库中的数据表结构 324 实例093 对数据库进行分离、附加、备份及还原操作...
实例089 点对点聊天程序设计 311 实例090 网络电台 314 第9章 数据库及LINQ技术 实例091 通用数据库连接 319 实例092 读取数据库中的数据表结构 324 实例093 对数据库进行分离、附加、备份及...
20.3.3 对EXE文件进行加密 20.3.4 解密文件的设置 第21章 视频监控模块 21.1 设计思路 21.2 关键技术 21.2.1 认识视频监控卡 21.2.2 视频监控卡中API函数的使用 21.2.3 Pelco-D协议 21.2.4 串口通信技术 21.2.5 ...
1. **文字聊天**:支持一对一和群组聊天模式,用户可以发送和接收文本消息。系统提供实时更新的聊天界面,确保消息的即时传递。同时,支持表情符号、图片和动画的发送,丰富用户的交流体验。 2. **文件传输**:用户...
实例089 点对点聊天程序设计 311 实例090 网络电台 314 第9章 数据库及LINQ技术 实例091 通用数据库连接 319 实例092 读取数据库中的数据表结构 324 实例093 对数据库进行分离、附加、备份及还原操作...
│ │ ├─实例131 如何实现点对点的聊天 │ │ ├─实例132 如何在线收听网络电台节目 │ │ ├─实例133 如何获取主机名和IP地址 │ │ ├─实例134 如何实现连续的PING │ │ └─实例135 如何扫描端口 │ └─第...