自定义的一个TCP文件接收小协议
2013-12-01 00:41
411 查看
bool isServer = false; //该程序是否是服务器 bool isText = true; //允许发送消息 bool isSend = false; //正在发送 bool isRec = false; //正在接收 const string Txt = "8"; //文本消息 const string Request="0"; //发送端请求 const string Ready="3"; //发送端发送数据就绪信号(发送该信号后即开始传送文件) const string NextWillData="4"; const string Data="5"; const string Accept="1"; //接收端接受数据 const string DataRefuse="2"; //接收端拒绝 const string DataEnd="6"; //接收端发送完成标志 const string DataAbort = "7"; //终止传输
public void ServerOrClientFun(TcpClient client) { if (isText) { string ReceiveMsg = SocketHelper.GetMsg(client); if (isSend){ //如果isSend,则将消息转给SendFun SendMsgStr = ReceiveMsg; } if (ReceiveMsg != "") { switch (ReceiveMsg[0].ToString()) //握手 { case Request: AddMsg("文件请求"); if (MessageBox.Show("请接收文件!", "文件接收", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { RecCount = 0; FileName = ReceiveMsg.Substring(1); SaveFileDialog s = new SaveFileDialog(); s.FileName = FileName; if (s.ShowDialog() == DialogResult.OK) { fileStream = new FileStream(s.FileName, FileMode.Create, FileAccess.Write); SocketHelper.SendMsg(client, Accept); } else { SocketHelper.SendMsg(client, DataRefuse); } } else { SocketHelper.SendMsg(client, DataRefuse); } break; case Ready: AddMsg("发送端已就绪"); SocketHelper.SendMsg(client, NextWillData); break; case NextWillData: AddMsg("NextWillData"); if (!isSend) { isText = false; SocketHelper.SendMsg(client, Data); } else { SocketHelper.SendMsg(client, NextWillData); } break; case DataEnd: if (!isSend) { AddMsg("接收完成!DataEnd"); MessageBox.Show("接收完成!"); } else { SocketHelper.SendMsg(client, DataEnd); //接收到接收端发来的接收完成信息然后向接收端发送文件接收完成的信息 AddMsg("发送完成!DataEnd"); MessageBox.Show("发送完成!"); } FreeResource(); break; case DataAbort: FreeResource(); AddMsg("传输已终止"); MessageBox.Show("传输已终止!"); break; case Txt: AddMsg(SocketHelper.GetRemoteAddress(client) + ":" + ReceiveMsg.Substring(1)); break; case Accept: AddMsg("接收端接收请求"); fileStream = new FileStream(FileName, FileMode.Open, FileAccess.Read); SocketHelper.SendMsg(client, Ready); break; case DataRefuse: AddMsg("接收端拒绝请求"); FreeResource(); MessageBox.Show("对方已拒绝!"); break; case Data: AddMsg("Data正在发送数据"); byte[] bt = new byte[BlockLen]; int ReadLen = fileStream.Read(bt, 0, BlockLen); SocketHelper.SendBuffer(client, bt, ReadLen); break; } } } else { //接收文件 NetworkStream sr = client.GetStream(); if (sr.CanRead) { byte[] bt = new byte[BlockLen]; int ReadLen = sr.Read(bt, 0, bt.Length); fileStream.Write(bt, 0, ReadLen); isText = true; if (ReadLen < BlockLen) { fileStream.Flush(); fileStream.Close(); SocketHelper.SendMsg(client, DataEnd); } else { SocketHelper.SendMsg(client, NextWillData); } } RecCount++; SetStatus("数据接收次数:" + RecCount); } }
相关文章推荐
- 如何通过Socket TCP发送并接收一个文件?
- 求救~socket自定义TCP传输文件,只能接收4M内容,后面的数据库包获取不到啊
- 用 TCP 协议写一个客户端和一个服务端,实现上传文件
- 黑马程序员--图形界面中的鼠标,键盘两个事件,做一个磁盘的文件列表,菜单,子菜单,模拟记事本。网络编程,TCP的通信协议的特点
- 用 TCP 协议写一个客户端和一个服务端,实现上传文件
- 一个简单的TCP自定义通信协议
- Spring.net在.NET应用程序的标准配置文件中用一个自定义节点来配置容器实例
- Unity C# 自定义TCP传输协议以及封包拆包、解决粘包问题
- netty源码分析(二十五)Netty自定义协议与TCP粘包拆包问题解决之道
- 【Java TCP/IP Socket】构建和解析自定义协议消息(含代码)
- 【Java TCP/IP Socket】构建和解析自定义协议消息(含代码)
- 【Java TCP/IP Socket】构建和解析自定义协议消息(含代码)
- 发一个套接字协议中的tcp案例,希望大家以后可以参考!……
- 如何自定义一个通信协议
- C#下面,怎么把一个自定义的结构体写入到文件中去?
- qt 下UDP消息的接收和发送和TCP发送文件
- 从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.txt文件名(后缀名文件)
- 利用UDP协议发送与接收文件
- [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器
- Linux网络编程一步一步学-自己编写一个HTTP协议的目录浏览和文件下载服务器