77范文网 - 专业文章范例文档资料分享平台

计算机网络课程设计报告文件传输协议的简单实现(3)

来源:网络收集 时间:2018-11-22 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

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)在线全文阅读。

计算机网络课程设计报告文件传输协议的简单实现(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/298675.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: