while (sendcount < size)//发送文件 {
int readcount = br.Read(buffer, 0, bufferSize); sendcount += readcount;
handler.Send(buffer, readcount, SocketFlags.None); } } catch {
HostQuit(); } }
private void HostQuit() {
GlobalValues.canControl.WaitOne();
GlobalValues.canControl.Release(); if (handler.Connected == true) {
handler.Shutdown(SocketShutdown.Both); handler.Close(); } }
private void SendString(Socket handler,string listStr) {
byte[] list = Encoding.BigEndianUnicode.GetBytes(listStr); byte[] listcountbuffer =
BitConverter.GetBytes(Convert.ToInt64(list.Length)); try {
handler.Send(listcountbuffer, 8, SocketFlags.None);//发送列表大小
int sendcount = 0;
while (sendcount < list.Length)//发送列表 {
if (sendcount + bufferSize < list.Length)//不是最后一次 {
int i = handler.Send(list, sendcount, bufferSize, SocketFlags.None);
sendcount += i; } else {
int i = handler.Send(list, sendcount, list.Length -
10
sendcount, SocketFlags.None);//发送最后一次 sendcount += i; } } }
catch (Exception e) {
MessageBox.Show(\连接断开.\); } }
//fileOnly=true则获取指定目录及子目录内所有文件信息,fileOnly=false则获取指定目录文件信息及文件夹信息
private string GetFileNames(string path, bool fileOnly) {
string listStr = string.Empty;
DirectoryInfo drct = new DirectoryInfo(path);
foreach (FileSystemInfo fsi in drct.GetFileSystemInfos()) {
if (fsi is FileInfo) {
//文件
FileInfo fi = (FileInfo)fsi; listStr += fi.FullName; listStr += \; if (fi.Length < 1024) {
string sizeStr = fi.Length.ToString() + \字节\; listStr += sizeStr; }
else if (fi.Length < 1024 * 1024) {
double temp = Convert.ToDouble(fi.Length) / 1024; string sizeStr = string.Format(\, temp) + \;
listStr += sizeStr; }
else if (fi.Length < 1024 * 1024 * 1024) {
double temp = Convert.ToDouble(fi.Length) / 1024 / 1024;
string sizeStr = string.Format(\, temp) + \;
listStr += sizeStr;
11
} else {
double temp = Convert.ToDouble(fi.Length) / 1024 / 1024 / 1024;
string sizeStr = string.Format(\, temp) + \;
listStr += sizeStr; }
listStr += \;
listStr += fi.LastWriteTime.ToString(\hh:mm:ss\);
listStr += \; }
else if (fsi is DirectoryInfo) {
if (fileOnly) {
listStr += GetFileNames(fsi.FullName, true); } else {
//文件夹
DirectoryInfo di = (DirectoryInfo)fsi; listStr += di.FullName; listStr += \; listStr += \; listStr += \;
listStr += di.LastWriteTime.ToString(\hh:mm:ss\);
listStr += \; } } }
return listStr; } } }
public 服务器() {
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false; string HostName = Dns.GetHostName(); //得到主机名
IPHostEntry IpEntry = Dns.GetHostEntry(HostName); //得到主机IP
12
string strIPAddr = IpEntry.AddressList[0].ToString(); tsTxb_IPAdd.Text = strIPAddr;
hostIPAddress = IPAddress.Parse(strIPAddr); Server = new IPEndPoint(hostIPAddress,
Convert.ToInt32(tsTxb_Port.Text));
sock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
sock.Bind(Server); sock.Listen(10);
string str = \正在监听端口 \ + tsTxb_Port.Text + \; tsLbl_Status.Text = \状态:\ + str;
AcceptTh = new Thread(ThAccept); AcceptTh.Start();//开始监听端口 }
//下面是监听和停止监听的按钮事件
private void btn_Start_Click(object sender, EventArgs e) {
tsBtn_Start.Enabled = false; tsBtn_Stop.Enabled = true;
Server = new IPEndPoint(hostIPAddress, Convert.ToInt32(tsTxb_Port.Text));
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sock.Bind(Server); sock.Listen(10);
string str = \正在监听端口 \ + tsTxb_Port.Text + \; tsLbl_Status.Text = \状态:\ + str; AcceptTh = new Thread(ThAccept); AcceptTh.Start(); }
private void btn_stop_Click(object sender, EventArgs e) {
tsBtn_Start.Enabled = true; tsBtn_Stop.Enabled = false; try {
sock.Shutdown(SocketShutdown.Both); }
catch { } sock.Close();
tsLbl_Status.Text = \状态:已停止监听\; }
13
2.5.2 客户(client)程序
//MyThread.cs中的实现 using System;
using System.Collections.Generic; using System.Linq; using System.Text; using System.IO;
using System.Net.Sockets; using System.Threading; using System.Windows.Forms;
namespace 客户端_TCP文件传输 {
public class myThread {
Thread downloadTh; Thread uploadTh; Socket wordSocket; string fileName; string savePath; byte[] buffer;
const int bufferSize = 4096; ToolStripProgressBar tspBar; ToolStripStatusLabel speed; int startTime=0; long receivecount = 0; long sendCount = 0;
int upOrDown = 1;//指示上传或下载
System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();
public myThread(Socket workSock, string FileName,string SavePath, ref ToolStripProgressBar TspBar, ref ToolStripStatusLabel Speed) {
wordSocket = workSock; fileName = FileName; savePath = SavePath;
buffer = new byte[bufferSize];
downloadTh = new Thread(new ThreadStart(Download)); uploadTh = new Thread(new ThreadStart(Upload)); tspBar = TspBar; speed = Speed; }
public myThread(Socket workSock, string FileName,ref
14
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库计算机网络课程设计报告文件传输协议的简单实现(3)在线全文阅读。
相关推荐: