- 浏览: 28272 次
最新评论
服务器端数据SQLServer查出转存SQLite
客户端(winCE通用)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Data.SQLite; using System.Configuration; using System.IO; using System.IO.Compression; using System.Threading; using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.SharpZipLib.BZip2; namespace Sockets { public partial class ServerForm : Form { Socket s = null; IPEndPoint iep = null; byte[] buf = new byte[5000]; Socket worker = null; private SQLiteCommand comma; private SQLiteConnection sqc; public ServerForm() { InitializeComponent(); Control.CheckForIllegalCrossThreadCalls = false; } #region 打开sqlite数据库 /// <summary> /// 打开数据库 /// </summary> private void opensqlite() //打开sqlite数据库 { sqc = new System.Data.SQLite.SQLiteConnection("Data Source=C:\\Documents and Settings\\fei5280\\桌面\\Sockets\\XMLs\\barcodetp.db;Pooling=false;FailIfMissing=false"); sqc.Open(); comma = sqc.CreateCommand(); } #endregion #region 查询插入数据 /// <summary> /// 数据操作 /// </summary> private void getdata() { int iCount = 0; StringBuilder str = new StringBuilder(); comma.CommandText = "delete from barlabel"; comma.ExecuteNonQuery(); string sqlstr = "SELECT TOP 10000 a.barcode,b.lot_no,a.packing_no,a.grade,a.nwt FROM barcodes.dbo.barin a INNER JOIN hc.dbo.specinfo b ON a.prod_id=b.prod_id"; DataTable dt = new Sysmis.Data.eTable("bars").Execute(sqlstr); for (int i = 0; i < dt.Rows.Count; i++) { str.Append("INSERT INTO barlabel values('" + dt.Rows[i]["barcode"].ToString() + "','" + dt.Rows[i]["lot_no"].ToString() + "','" + dt.Rows[i]["packing_no"].ToString() + "','" + dt.Rows[i]["grade"].ToString() + "','" + dt.Rows[i]["nwt"].ToString() + "');"); //str.Append("INSERT INTO barstore values('" + dt.Rows[i]["barcode"].ToString() + "');"); iCount = iCount + 1; if (iCount > 500) { comma.CommandText = "BEGIN TRANSACTION;" + str.ToString() + "COMMIT;"; //}; comma.ExecuteNonQuery(); str.Remove(0, str.Length); iCount = 0; } } comma.CommandText = "BEGIN TRANSACTION;" + str.ToString() + "COMMIT;"; int j = comma.ExecuteNonQuery(); comma.Dispose(); sqc.Dispose(); sqc.Close(); } #endregion #region 打开SOCKET TCP通道 private void button1_Click(object sender, EventArgs e) { //创建一个通道 s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //创建一个侦听点 iep = new IPEndPoint(IPAddress.Any, 20000); //绑定到通道上 s.Bind(iep); //侦听 s.Listen(6); //通过异步来处理 s.BeginAccept(new AsyncCallback(Accept), s); this.button1.Visible = false; } #endregion #region 处理接收到的消息 void Accept(IAsyncResult ia) { s = ia.AsyncState as Socket; worker = s.EndAccept(ia); s.BeginAccept(new AsyncCallback(Accept), s); try { //检查是否有客户端发送来的操作消息 异步调用 worker.BeginReceive(buf, 0, buf.Length, SocketFlags.None, new AsyncCallback(Receive), worker); } catch { throw; } } #endregion #region 接收发送消息 /// <summary> /// 当客户端接收到特定的信息的时候自动发送文件barcodetp.db /// </summary> /// <param name="ia"></param> void Receive(IAsyncResult ia) { try { opensqlite(); getdata(); worker = ia.AsyncState as Socket; //原本的Socket对象使用用来接收信息,每收到一次,都会创建一个包含该条信息的Socket对象,你只能通过这个创建出来的Socket对象来收取信息,而那个最初的Socket对象只负责接收。 int count = worker.EndReceive(ia); //结束时挂起异步读取 worker.BeginReceive(buf, 0, buf.Length, SocketFlags.None, new AsyncCallback(Receive), worker); //buf = ReceiveVarData(worker); string context = Encoding.GetEncoding("gb2312").GetString(buf, 0, count); this.textBox1.Text += Environment.NewLine; this.textBox1.Text += context; if (this.textBox1.Text != "") { FileStream sr = null; byte[] buffer = null; string path = "C:\\Documents and Settings\\fei5280\\桌面\\Sockets\\XMLs\\barcodetp.db"; if (File.Exists(path)) { FileInfo EzoneFile = new FileInfo(path); sr = EzoneFile.OpenRead(); //获得读取的FileStream buffer = new byte[sr.Length]; //sr.Length 获得文件的大小 1kb文件 = new byte[1024]; } else { MessageBox.Show("无法找到文件"); return; } //发送[包的大小]到客户端 SendVarData(worker, Encoding.GetEncoding("gb2312").GetBytes(sr.Length.ToString())); byte[] data = null; //包的数量 int aaa = (int)buffer.Length / 5000; //开始循环发送数据包 for (int i = 0; i < aaa; i++) { //从文件流读取数据并填充数据包 sr.Read(buf, 0, buf.Length); //发送数据包 SendVarData(worker, buf); //显示发送数据包的个数 } //未被发送完成的包的数量 int bbb = buffer.Length - aaa * 5000; //如果还有多余的数据包,则应该发送完毕! if (bbb != 0) { data = new byte[bbb]; sr.Read(data, 0, data.Length); SendVarData(worker, data); // this.progressBar1.Value = this.progressBar1.Maximum; } sr.Flush(); sr.Close(); // worker.Send(buffer); } } catch { } } #endregion #region 服务端发送数据的方法(最好不要调用) 客户端可能报错 private void button2_Click(object sender, EventArgs e) { string context = "XXXXX" + this.textBox2.Text.Trim(); if (context != "") { this.textBox1.Text += Environment.NewLine; this.textBox1.Text += context; this.textBox2.Text = ""; worker.Send(Encoding.GetEncoding("gb2312").GetBytes(context)); } } #endregion #region 循环发送数据 /// <summary> /// 循环传输数据 /// </summary> /// <param name="s"></param> /// <param name="data"></param> /// <returns>传输数据的数量</returns> public static int SendVarData(Socket s, byte[] data) { int total = 0; int size = data.Length; int dataleft = size; int sent; byte[] datasize = new byte[4]; datasize = BitConverter.GetBytes(size); sent = s.Send(datasize); while (total < size) { sent = s.Send(data, total, dataleft, SocketFlags.None); total += sent; dataleft -= sent; } return total; } #endregion #region 循环接收数据 public byte[] ReceiveVarData(Socket s) { int recv = 1; int total = 0; byte[] datasize = new byte[4]; recv = s.Receive(datasize, 0, 4, SocketFlags.None); int size = BitConverter.ToInt32(datasize, 0); int dataleft = size; byte[] data = new byte[size]; while (total < size) { recv = s.Receive(data, total, dataleft, SocketFlags.None); total += recv; dataleft -= recv; } return data; } #endregion #region 压缩 public static byte[] Compress(byte[] byteArray) { //byte[] byteArray = Encoding.UTF8.GetBytes(value); ------当传入为string时 byte[] tmpArray; using (MemoryStream ms = new MemoryStream()) { using (GZipStream sw = new GZipStream(ms, CompressionMode.Compress)) { sw.Write(byteArray, 0, byteArray.Length); sw.Flush(); } tmpArray = ms.ToArray(); } return tmpArray; } #endregion #region 解压缩 /// <summary> /// 解压缩 /// </summary> /// <param name="value1"></param> /// <returns></returns> public static byte[] Decompress(byte[] value1) { //byte[] zippedData = Convert.FromBase64String(value1); -----当传入为string时 MemoryStream ms = new MemoryStream(value1); GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Decompress); MemoryStream outBuffer = new MemoryStream(); byte[] block = new byte[1024]; while (true) { int bytesRead = compressedzipStream.Read(block, 0, block.Length); if (bytesRead <= 0) break; else outBuffer.Write(block, 0, bytesRead); } compressedzipStream.Close(); return outBuffer.ToArray(); } #endregion #region 窗口关闭 public void ServerForm_FormClosing(object sender, FormClosingEventArgs e) { this.Dispose(); } #endregion public static byte[] Zip(byte[] data) { MemoryStream inStream = new MemoryStream(data); MemoryStream outStream = new MemoryStream(); BZip2.Compress(inStream, outStream, data.Length); byte[] result = outStream.ToArray(); inStream.Close(); outStream.Close(); return result; } public static byte[] Unzip(byte[] data, int offset, int size) { MemoryStream inStream = new MemoryStream(data, offset, size); MemoryStream outStream = new MemoryStream(); BZip2.Decompress(inStream, outStream); byte[] result = outStream.ToArray(); inStream.Close(); outStream.Close(); return result; } } }
客户端(winCE通用)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.IO; using ICSharpCode.SharpZipLib.BZip2; using System.Threading; namespace Sockets { public partial class ClientForm : Form { Socket s = null; IPEndPoint iep = null; private int bagCount; private string path = "E:\\barcodelot1.db"; public ClientForm() { InitializeComponent(); // Control.CheckForIllegalCrossThreadCalls = false; } #region 连接服务器端 private void button1_Click(object sender, EventArgs e) { s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); iep = new IPEndPoint(IPAddress.Parse("192.168.10.24"), 20000); try { s.Connect(iep); this.label1.Text = "连接成功"; this.button1.Visible = false; } catch { throw; } } #endregion #region 发送消息 接收服务端传输过来的文件 /// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button2_Click(object sender, EventArgs e) { this.label3.Visible = true; this.label3.Text = "数据准备中......."; Application.DoEvents(); this.button2.Enabled = false; string context = iep.ToString() + ":" + this.textBox2.Text.Trim(); //this.textBox1.Text += Environment.NewLine; this.textBox1.Text += context; this.textBox2.Text = ""; //if (File.Exists(path)) //{ // File.Delete(path); //} //发送数据的到服务器端 s.Send(Encoding.GetEncoding("gb2312").GetBytes("s42160144295")); //新建服务器端传输的文件 FileStream MyFileStream = new FileStream(path, FileMode.Create, FileAccess.Write); // int SendedCount = 0; //接收到服务器端传输的文件大小 byte[] bu = ReceiveVarData(s); bagCount = int.Parse(Encoding.GetEncoding("gb2312").GetString(bu, 0, bu.Length)); this.progressBar1.Maximum = bagCount; while (true) { this.progressBar1.Visible = true; this.label2.Visible = true; this.label3.Visible = false; Application.DoEvents(); this.label2.Text = (Convert.ToDouble(MyFileStream.Length) / Convert.ToDouble(bagCount)).ToString("P"); ; this.progressBar1.Value = Convert.ToInt32(MyFileStream.Length); if (MyFileStream.Length >= bagCount) { this.label2.Text = "100 %"; this.progressBar1.Value = this.progressBar1.Maximum; break; } byte[] data = ReceiveVarData(s); // SendedCount++; //将接收到的数据包写入到文件流对象 MyFileStream.Write(data, 0, data.Length); //显示已发送包的个数 //MessageBox.Show("已发送包个数"+SendedCount.ToString()); } //关闭文件流 MyFileStream.Flush(); MyFileStream.Close(); MessageBox.Show("OK"); this.progressBar1.Value = 0; this.label2.Text = "0 %"; this.button2.Enabled = true; this.progressBar1.Visible =false; this.label2.Visible = false; } #endregion #region 循环接收数据 public byte[] ReceiveVarData(Socket s) { int recv = 1; int total = 0; byte[] datasize = new byte[4]; recv = s.Receive(datasize, 0, 4, SocketFlags.None); int size = BitConverter.ToInt32(datasize, 0); int dataleft = size; byte[] data = new byte[size]; while (total < size) { recv = s.Receive(data, total, dataleft, SocketFlags.None); total += recv; dataleft -= recv; } return data; } #endregion //#region 解压缩 暂未用到 //public byte[] Decompress(byte[] value1) //{ // //byte[] zippedData = Convert.FromBase64String(value1); // MemoryStream ms = new MemoryStream(value1); // GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Decompress); // MemoryStream outBuffer = new MemoryStream(); // byte[] block = new byte[1024]; // while (true) // { // int bytesRead = compressedzipStream.Read(block, 0, block.Length); // if (bytesRead <= 0) // { // break; // } // else // outBuffer.Write(block, 0, bytesRead); // } // compressedzipStream.Close(); // return outBuffer.ToArray(); //} //#endregion //#region 关闭窗口 //public void ClientForm_FormClosing(object sender, FormClosingEventArgs e) //{ // this.Dispose(); //} //#endregion public static byte[] Unzip(byte[] data) { MemoryStream inStream = new MemoryStream(data); MemoryStream outStream = new MemoryStream(); BZip2.Decompress(inStream, outStream); byte[] result = outStream.ToArray(); inStream.Close(); outStream.Close(); return result; } } }
- Sockets.zip (1.7 MB)
- 下载次数: 4
相关推荐
- 如果需要在不安全的网络环境中传输文件,可以考虑使用SSL/TLS加密Socket,提供数据传输的安全性。 10. **示例代码** ```csharp // Server端简化示例 Socket serverSocket = new Socket(AddressFamily....
C#socket 大文件传输 分段传输 C#DEMO
- **安全性**:如果是在不安全的网络环境中传输文件,应考虑使用SSL/TLS等加密机制保证数据的安全性。 - **文件分块**:对于大文件,可能需要分块传输,每次发送一小部分,以避免内存溢出。 在压缩包中的`Socket...
其中Model为模型项目,SocketProtocol为传输协议,Utility为帮助类 本案例通过一个基本协议,使用socket传送数据,能够达到大量数据发送不发生粘包等常见现象,在我本机测试,一次性能够传送的数据包大小为系统一次性能够...
本示例"**C#SOCKET大文件传输.zip**"聚焦于利用C#的Socket类进行大文件的高效、稳定传输,特别是支持高并发和断点续传功能,这对于开发大规模、高性能的应用程序至关重要。 首先,我们来理解**Socket**。Socket是...
标题"**C#网络传输文件(socket)**"涉及的核心概念有: 1. **C# Socket编程**:C#提供了Socket类,用于建立TCP/IP连接。TCP(传输控制协议)是一种面向连接的、可靠的网络协议,确保数据包按顺序到达且无丢失。 2. *...
总结来说,"c# Socket Tcp传输文件"涉及到的关键知识点有: 1. TCP协议的工作原理和特性。 2. C#中的`System.Net.Sockets.Socket`类及其使用方法。 3. 文件流读写和字节流处理。 4. 数据传输的缓冲区管理和批量操作...
本文将深入探讨如何使用C#语言通过Socket实现大文件的分包传输,以解决在数据传输过程中可能遇到的网络拥堵、内存限制等问题。 首先,理解Socket的基本概念。Socket是网络通信中的一个端点,它提供了一种在不同...
在C#编程语言中,利用Socket API进行TCP通信可以构建高效、稳定的文件传输系统,特别是在处理大文件时,断点续传功能则显得尤为必要。下面,我们将深入探讨如何使用C#的Socket实现TCP大文件传输并支持断点续传。 ...
使用SOCKET传输文件,自带进度条,只是一个自己写来学习的脚本,很多是在代码里写死的...自己修改下吧...
这是我用C#编写的基于Socket网络编程技术,在网络上传输加密文件,并对其进行数字签名,在另一端进行解密,并验证签名的一个WinForm程序,里面涉及到的加密解密算法有对称密码算法DES和非对称密码算法RSA加密解密...
标题中的"C# Socket Tcp文件传输和文字聊天系统"是指使用C#编程语言,基于Socket和TCP协议实现的一个功能,它涵盖了文件传输和文字聊天两大功能。Socket是网络通信中的一个基本概念,它允许两个网络应用进行数据交换...
文件传输是网络通信中的常见需求,结合SOCKET和加密技术,我们能够安全地传输文件。在C#中,文件读写操作通常通过FileStream类完成,而将文件内容分块并通过SOCKET发送则需要利用Socket类的Send和Receive方法。同时...
本篇将详细讲解基于C#的Socket和Tcp进行文件传输下载的相关知识点。 首先,Socket是网络通信的基础,它是应用程序与网络协议交互的接口。在C#中,`System.Net.Sockets.Socket` 类提供了一个用于实现TCP、UDP等网络...
C# Socket传输主机硬件配置信息 一、Server ---服务端,引用了xxbtool和datatool,主要功能:接收客户端XML文件与主机配置Model写入数据库。 二、Client ---客户端,引用xxbtool,暂时功能只有:与服务端消息通信、...
在C#中,你可以设计自己的文件传输协议,例如,先发送文件名和文件大小,然后分块传输文件内容。 6. **错误处理和异常**:在文件传输过程中,可能会遇到网络中断、文件过大等问题。因此,需要适当的错误处理机制,...
C#作为.NET框架的主要编程语言,提供了强大的Socket类库来处理网络通信,包括高效地传输大文件。本文将深入探讨如何利用C# Socket实现高性能的大文件传输。 标题"**C# Socket 高性能传送大文件**"涉及的关键技术点...
本项目"C# socket局域网文件传输电脑端131114"提供了在C#编程环境下,利用socket技术实现在局域网内的多文件传输功能。下面我们将详细探讨涉及的关键知识点。 1. **C# Socket编程**:Socket是网络通信的基础,它...
本篇将详细介绍如何利用C# Socket实现局域网内的文件传输。 首先,我们需要理解Socket的基本概念。Socket是网络通信中的一个端点,它允许两个应用程序通过网络进行数据交换。在C#中,System.Net.Sockets命名空间...