C#实现局域网文件传输

C#实现局域网文件传输网络通信一般都是通过Socket进行的,称为进程通信机制,通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。先学习一下socket基本原理:socket原理:  在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,象一个多孔插…

大家好,又见面了,我是你们的朋友全栈君。

网络通信一般都是通过Socket进行的,称为进程通信机制,通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。

先学习一下socket基本原理:

socket原理:   在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。

Socket的形像理解:

socket非常类似于电话插座。以一个国家级电话网为例。

电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。

任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。

然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。

对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。

双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。

通话结束后,一方挂起电话机相当于关闭socket,撤消连接。

 

Socket 通信应用示图

 C#实现局域网文件传输

 

 

TCP/IP 客户端/服务端通信流程图

 C#实现局域网文件传输

 

通过Socket通信原理的认识,下面可以开始写一个简单的通信程序,进行验证。

在这里,做了一个局域网内文件传输程序,其实模仿飞鸽传输的功能。

在公司里面是禁用QQ,不能使用QQ,有时发现挺麻烦的,传输文件不方便,搞得经常要用U盘来拷东西。

为此,我设想写一个简单的局域网文件传输入工具,暂时解决不能上QQ的痛苦。

发送文件代码片段:

C#实现局域网文件传输
C#实现局域网文件传输
View Code

/// <summary>
/// 发送文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSentFile_Click(object sender, EventArgs e)
{
//打开文件
OpenFileDialog dlg = new OpenFileDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
for (int i = 0; i < lvwDisplayUser.SelectedItems.Count; i++)
{
string ip = this.lvwDisplayUser.SelectedItems[i].SubItems[2].Text;

//初始化接受套接字:寻址方案,以字符流方式和Tcp通信
socketSent = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);

//设置服务器IP地址和端口
ipSent = new IPEndPoint(IPAddress.Parse(ip), 8001);

//与服务器进行连接
LanSocket socketConnet = new LanSocket(socketSent, ipSent);
Thread tConnection = new Thread(new ThreadStart(socketConnet.SocketConnect));
tConnection.Start();

Thread.Sleep(100);
//将要发送的文件加上"DAT"标识符

SentLanFile sentFile = new SentLanFile(dlg, socketSent);
Thread tSentFile = new Thread(new ThreadStart(sentFile.SentFile));
tSentFile.Start();
}
}
}
/// <summary>
/// 发送文件
/// </summary>
public void SentFile()
{
string msg = "0DAT " + dlg.FileName;

//将 "msg" 转化为字节流的形式进行传送
socketSent.Send(Encoding.Default.GetBytes(msg));

//定义一个读文件流
FileStream read = new FileStream(dlg.FileName, FileMode.Open, FileAccess.Read);

//设置缓冲区为1024byte
byte[] buff = new byte[1024];
int len = 0;
while ((len = read.Read(buff, 0, 1024)) != 0)
{
//按实际的字节总量发送信息
socketSent.Send(buff, 0, len, SocketFlags.None);
}

//将要发送信息的最后加上"END"标识符
msg = "END";

//将 "msg" 发送
socketSent.Send(Encoding.Default.GetBytes(msg));
socketSent.Close();
read.Close();
}

 C#实现局域网文件传输

 

 

转载于:https://www.cnblogs.com/wangchunming/archive/2012/03/18/2405106.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142934.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月22日 下午5:00
下一篇 2022年5月22日 下午5:00


相关推荐

  • oracle ebs 12.20 安装成功其过程失败日记及总结(1)

    oracle ebs 12.20 安装成功其过程失败日记及总结(1)

    2021年12月15日
    46
  • 阿基米德三角形「建议收藏」

    阿基米德三角形「建议收藏」已知抛物线\(C:x^2=2py\),弦\(AB\)过\(C\)的焦点\(F\),过\(A,B\)两点作抛物线\(C\)的两条切线,若两切线相交于点\(P\),则(1)

    2022年8月3日
    7
  • 视频中的车牌特征识别[通俗易懂]

    视频中的车牌特征识别[通俗易懂]这里,没有直接采用之前的方案,是因为在设计的时候,发现直接采用颜色等直接特征提取然后进行二值化处理的方法,如果视频中出现颜色类似的区域,则很有可能错误的定位,例如在公交车中车牌区域范围和前窗以及部分的背景比较相似,直接采用这种方法会出错。这里,定位的算法,我们使用的是HOG特征提取和Adaboost的算法进行定位。对应的程序为:具体的原理如下所示:adaboost:http://www.doc88.com/p-211656392…

    2022年5月15日
    52
  • mybatis自动生成代码插件idea_pro tools插件

    mybatis自动生成代码插件idea_pro tools插件IntellijIdeaMybatis插件主要有Mybatisplugin插件和Mybatistools插件。(一)Mybatisplugin插件主要功能有:提供Mapper接口与配置文件中对应SQL的导航编辑XML文件时自动补全根据Mapper接口,使用快捷键生成xml文件及SQL标签ResultMap中的property支持自动补全

    2022年8月31日
    6
  • 2.2.5 操作系统之调度算法(时间片轮转调度算法、优先级调度算法、多级反馈队列调度算法)

    2.2.5 操作系统之调度算法(时间片轮转调度算法、优先级调度算法、多级反馈队列调度算法)文章目录 0 思维导图 1 时间片轮转 RR2 优先级调度算法 3 多级反馈队列调度算法 4 三种算法的对比总结 0 思维导图 1 时间片轮转 RRRound Robin 时间片为 2 举例以时间片为 5 举例可能出现的问题 比如与 FCFS 对比 2 优先级调度算法非抢占式例子 抢占式例子补充 3 多级反馈队列调度算法举个例子 4 三种算法的对

    2026年3月17日
    2
  • 不可重入函数

    不可重入函数不可重入函数文章目录不可重入函数举例保证函数的可重入性的方法 实时系统举例 malloc 维护内部的链表 而且这个过程不是原子的 譬如 应用正在执行一个函数 该函数刚好调用 malloc 此时应用 catch 到某个 signal signal 如果调用这个函数 就会导致再一次 malloc 而此刻 malloc 就可能出大问题 主要用于多任务环境中 一个可重入的函数简单来说就是可以被

    2026年3月19日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号