//发送文件 private void btn_sendFile_Click(object sender, EventArgs e) { //打开文件 OpenFileDialog dlg = new OpenFileDialog(); if (dlg.ShowDialog() == DialogResult.OK) { //初始化接受套接字:寻址方案,以字符流方式和Tcp通信 socketSent = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //设置服务器IP地址和端口 ipSent = new IPEndPoint(IPAddress.Parse(ip), 8001); //与服务器进行连接 ClassSocket socketConnet = new ClassSocket(socketSent, ipSent); Thread tConnection = new Thread(new ThreadStart(socketConnet.SocketConnect)); tConnection.Start(); Thread.Sleep(100); //将要发送的文件加上"DAT"标识符 ClassSentFile sentFile = new ClassSentFile(dlg, socketSent); Thread tSentFile = new Thread(new ThreadStart(sentFile.SentFile)); tSentFile.Start(); } }
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net; using System.Net.Sockets; using System.Windows.Forms; namespace Message { class ClassSentFile { private OpenFileDialog dlg; private Socket socketSent; public ClassSentFile(OpenFileDialog dlg, Socket socketSent) { this.dlg = dlg; this.socketSent = socketSent; } public void SentFile() { string msg = "DAT " + 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(); } } }