文档库 最新最全的文档下载
当前位置:文档库 › C# TCP发送消息和传输文件

C# TCP发送消息和传输文件

C# TCP发送消息和传输文件
C# TCP发送消息和传输文件

【背景】

最近做了一个双机备份,就是服务器上有个文件夹,会接收客户端传来的文件,而我们要做的就是同步这台服务器和另一台备用服务器上的文件.

为了实现这个功能我们使用的tcp点对点传输.

【开发环境】

VS2005

【实现原理】

要实现同步要解决两个问题,一个是获取本地服务器上上传上来的文件,二是实现两台机器间的文件传输.

第一个问题我们用的FileSystemWatcher这个可以监视指定文件夹下的文件变动,然后我们把变动的文件信息记录到数据库,在指定的时间间隔后同步两台机器的文件.

第二个问题我们用的tcp文件传输,我们按照一定的原则通过传输消息来告知备份服务器的要传输的文件名称和大小,然后传输文件.

【代码】

1:FileSystemWatcher监视文件变动的就不介绍了,很简单的winform控件应用. 2:为了完成文件传输,我做了一个TcpHelper类库,其中包括

TcpCommon,TcpClientHelper,TcpListenerHelper三个类,TcpCommon主要实现了文件传输时用的一些公共的方法比如发送接收文件,发送接收消息,和文件hash的计算TcpCommon

using System;

using System.Collections.Generic;

using System.Text;

using System.Security.Cryptography;

using System.IO;

using https://www.wendangku.net/doc/6a17111214.html,.Sockets;

namespace Xpwy.Backup.PTcpHelper

{

internal class TcpCommon

{

private static readonly int _blockLength = 500 * 1024;

///

///计算文件的hash值

///

internal string CalcFileHash(string FilePath)

{

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvid er();

byte[] hash;

using (FileStream fs = new FileStream(FilePath, FileMode. Open, FileAccess.Read, FileShare.Read, 4096))

{

hash = https://www.wendangku.net/doc/6a17111214.html,puteHash(fs);

}

return BitConverter.ToString(hash);

}

///

///发送文件

///

///

///

///

internal bool SendFile(string filePath, NetworkStream stream) {

FileStream fs = File.Open(filePath, FileMode.Open);

int readLength = 0;

byte[] data = new byte[_blockLength];

//发送大小

byte[] length = new byte[8];

BitConverter.GetBytes(new FileInfo(filePath).Length).Copy To(length, 0);

stream.Write(length, 0, 8);

//发送文件

while ((readLength = fs.Read(data, 0, _blockLength)) > 0) {

stream.Write(data, 0, readLength);

}

fs.Close();

return true;

}

///

///接收文件

///

///

///

///

internal bool ReceiveFile(string filePath, NetworkStream stre am)

{

try

{

long count = GetSize(stream);

if (count == 0)

{

return false;

}

long index = 0;

byte[] clientData = new byte[_blockLength];

if (File.Exists(filePath))

{

File.Delete(filePath);

}

string path=new FileInfo(filePath).Directory.FullName;

if (!Directory.Exists(path))

{

Directory.CreateDirectory(path);

}

FileStream fs = File.Open(filePath, FileMode.OpenOrCr eate);

try

{

//计算当前要读取的块的大小

int currentBlockLength = 0;

if (_blockLength < count - index)

{

currentBlockLength = _blockLength;

}

else

{

currentBlockLength =(int)( count - index);

}

int receivedBytesLen = stream.Read(clientDat

a, 0, currentBlockLength);

index += receivedBytesLen;

fs.Write(clientData, 0, receivedBytesLen);

while (receivedBytesLen > 0 && index < count)

{

clientData = new byte[_blockLength];

receivedBytesLen = 0;

if (_blockLength < count - index)

{

currentBlockLength = _blockLength;

}

else

{

currentBlockLength = (int)(count - index); }

receivedBytesLen = stream.Read(clientDat

a, 0, currentBlockLength);

index += receivedBytesLen;

fs.Write(clientData, 0, receivedBytesLen);

}

}

catch (Exception ex)

{

return false;

}

finally

{

fs.Close();

}

}

catch (Exception ex)

{

return false;

}

return true;

}

///

///发送消息

///

///

///

///

internal bool SendMessage(string message, NetworkStream strea m)

{

byte[] data = Encoding.UTF8.GetBytes(message);

byte[] resultData = new byte[8 + data.Length];

BitConverter.GetBytes(data.Length).CopyTo(resultData, 0);

data.CopyTo(resultData, 8);

stream.Write(resultData, 0, resultData.Length);

return true;

}

///

///读取消息

///

///

///

internal string ReadMessage(NetworkStream stream)

{

string result = "";

int messageLength = 0;

byte[] resultbyte = new byte[500 * 1024];

//读取数据大小

int index = 0;

int count = GetSize(stream);

byte[] data = new byte[count];

while (index < count && (messageLength = stream.Read(dat a, 0, count - index)) != 0)

{

data.CopyTo(resultbyte, index);

index += messageLength;

}

result = Encoding.UTF8.GetString(resultbyte, 0, index);

return result;

}

///

///获取要读取的数据的大小

///

///

///

private int GetSize(NetworkStream stream)

{

int count = 0;

byte[] countBytes = new byte[8];

try

{

if (stream.Read(countBytes, 0, 8) == 8)

{

count = BitConverter.ToInt32(countBytes, 0);

}

else

{

return0;

}

}

catch (Exception ex)

{

}

return count;

}

}

}

TcpClientHelper

using System;

using System.Collections.Generic;

using System.Text;

using https://www.wendangku.net/doc/6a17111214.html,.Sockets;

namespace Xpwy.Backup.PTcpHelper

{

public class TcpClientHelper:IDisposable

{

TcpClient client;

NetworkStream netstream;

string _serverip = "127.0.0.1";

int _port = 8080;

TcpCommon tcpCommon = new TcpCommon();

#region TcpClientHelper constructor

public TcpClientHelper(string strServerIP, int serverPort) {

_serverip = strServerIP;

_port = serverPort;

}

#endregion

public void Start()

{

client = new TcpClient(_serverip, _port);

netstream = client.GetStream();

}

public void Stop()

{

if (netstream != null)

{

netstream.Close();

}

if (client != null)

{

client.Close();

}

}

#region TcpCommon所有方法

public string CalcFileHash(string FilePath)

{

return tcpCommon.CalcFileHash(FilePath);

}

public bool SendFile(string filePath)

{

return tcpCommon.SendFile(filePath, netstream);

}

public bool ReceiveFile(string filePath)

{

return tcpCommon.ReceiveFile(filePath, netstream); }

public bool SendMessage(string message)

{

return tcpCommon.SendMessage(message, netstream); }

public string ReadMessage()

{

return tcpCommon.ReadMessage(netstream); }

#endregion

#region IDisposable 成员

public void Dispose()

{

if (netstream != null)

{

netstream.Close();

}

if (client != null)

{

client.Close();

}

}

#endregion

}

}

TcpListenerHelper

using System;

using System.Collections.Generic;

using System.Text;

using https://www.wendangku.net/doc/6a17111214.html,.Sockets;

using https://www.wendangku.net/doc/6a17111214.html,;

using System.Threading;

namespace Xpwy.Backup.PTcpHelper

{

public class TcpListenerHelper

{

private string _strServerIP = "";

private int _serverPort = 0;

TcpListener server;

TcpClient client;

NetworkStream netstream;

IAsyncResult asyncResult;

TcpCommon tcpCommon = new TcpCommon();

ManualResetEvent listenConnected = new ManualResetEvent(fals e);

bool _active = false;

public TcpListenerHelper(string strServerIP, int serverPort) {

_strServerIP = strServerIP;

_serverPort = serverPort;

server = new TcpListener(IPAddress.Parse(strServerIP), se rverPort);

server.Server.ReceiveTimeout = 6000;

server.Server.SendTimeout = 6000;

}

///

///启动

///

public void Start()

{

try

{

_active = true;

server.Start();

}

catch (Exception ex)

{

throw ex;

}

}

///

///停止

///

public void Stop()

{

try

{

_active = false;

if (client != null)

{

client.Close();

}

if (netstream != null)

{

netstream.Close();

}

server.Stop();

}

catch (Exception ex)

{

throw ex;

}

}

public void Listen()

{

listenConnected.Reset();

asyncResult = server.BeginAcceptTcpClient(new AsyncCallba ck(AsyncCall), server);

}

public void AsyncCall(IAsyncResult ar)

{

try

{

TcpListener tlistener = (TcpListener)ar.AsyncState;

if (_active)

{

client = tlistener.EndAcceptTcpClient(ar);

netstream = client.GetStream();

}

else

{

client = null;

netstream = null;

}

listenConnected.Set();

}

catch (Exception ex)

{

throw ex;

}

}

public bool WaitForConnect()

{

listenConnected.WaitOne();

if (client != null && netstream != null)

{

return true;

}

else

{

return false;

}

}

#region TcpCommon所有方法

///

///计算文件的hash值

///

public string CalcFileHash(string FilePath)

{

return tcpCommon.CalcFileHash(FilePath);

}

///

///发送文件

///

///

///

public bool SendFile(string filePath)

{

return tcpCommon.SendFile(filePath, netstream);

}

///

///接收文件

///

///

///

public bool ReceiveFile(string filePath)

{

return tcpCommon.ReceiveFile(filePath, netstream); }

///

///发送消息

///

///

///

public bool SendMessage(string message)

{

return tcpCommon.SendMessage(message, netstream);

}

///

///接收消息

///

///

public string ReadMessage()

{

return tcpCommon.ReadMessage(netstream);

}

#endregion

#region IDisposable 成员

public void Dispose()

{

Stop();

}

#endregion

}

}

3:调用的代码

server端:

public void DoWork(object state)

{

TcpListenerHelper tlistener = (TcpListenerHelper)state; tlistener.Listen();//监听

while (tlistener.WaitForConnect())//等待知道监听到了连接

{

try

{

string firstMessage = "";

while (!string.IsNullOrEmpty((firstMessage = tlis tener.ReadMessage())))

{

if (firstMessage.ToLower() == "filebak".ToLow er())

{

tlistener.SendMessage("filebakok");

#region文件备份

string filepath = https://www.wendangku.net/doc/6a17111214.html,bine(Environmen t.CurrentDirectory, "FileBak\\" + tlistener.ReadMessage()).ToString(); tlistener.ReceiveFile(filepath);

if (tlistener.CalcFileHash(filepath) == t listener.ReadMessage())

{

tlistener.SendMessage("ok");

}

else

{

tlistener.SendMessage("wrong");

}

#endregion

}

else if (firstMessage.ToLower() == "DBBak".To Lower())

{

#region数据库备份

tlistener.SendMessage("dbbakok");

string filename = tlistener.ReadMessage();

string filepath = https://www.wendangku.net/doc/6a17111214.html,bine(System.Env ironment.CurrentDirectory, "DBBak") +"\\"+ filename;

//接收文件

tlistener.ReceiveFile(filepath);

//验证hash值

string hash = tlistener.ReadMessage();

if (hash == tlistener.CalcFileHash(filepa th))

tlistener.SendMessage("ok");

else

tlistener.SendMessage("wrong");

#endregion

}

}

catch

{

}

tlistener.Listen();//监听下一个连接

}

}

client端:

private void FileBackup(object arg)

{

TcpClientHelper client = (TcpClientHelper)arg;

//获取需备份的文件

DataTable dt = this._oFileWatch.GetBackupFiles();

if (dt != null)

{

for (int i = 0; i < dt.Rows.Count; i++)

{

client.SendMessage("FileBak");

if (client.ReadMessage().ToLower() == "filebakok") {

client.SendMessage(dt.Rows[i]["RelativePath"]. ToString());

client.SendFile(dt.Rows[i]["FullPath"].ToStri ng());

client.SendMessage(client.CalcFileHash(dt.Row s[i]["FullPath"].ToString()));

if (client.ReadMessage().ToLower() == "ok")

{

LOGClass.WriteLog("备份文件【" + dt.Rows[i] ["FullPath"].ToString() + "】成功");

}

else

{

LOGClass.WriteLog("备份文件【" + dt.Rows[i] ["FullPath"].ToString() + "】失败。");

}

}

this._oFileWatch.ClearTmp(); }

}

文件传输系统的设计与实现.

JISHOU UNIVERSITY 专业课课程论文 文件传输系统的设计与实现题目: 作者: 学号: 所属学院:信息科学与工程学院 专业年级:计算机科学与技术 总评分: 完成时间:

文件传输系统的设计与实现 摘要 互联网的一大特点是实现信息共享,文件传输是信息共享的十分重要的内容之一。随之出现了许多FTP服务器来共享一些信息资源,编写一个操作简单,方便的FTP客户端来下载这些资源受到了人们的极大的欢迎。 FTP是一种用于在网上传输文件的协议,从原理上说,FTP是一个客户/服务器模式的应用协议。它用两个连接来实现:一个是控制连接,用来连接服务器和实现文件操作;一个是数据连接,用来实现数据传输。FTP的实现核心是命令/应答模式,FTP客户端将用户的所有FTP相关请求都转化为FTP服务器可识别的命令,然后发送到服务器,并接收和处理执行完毕后服务器传回的应答。 本程序是一个小型FTP服务器系统,实现了FTP服务器所应该具备的大多数功能,包括用户的登录,文件的上传、下载、删除,选择数据传输模式、目录选择等,并给出相应的提示。通过该程序的开发,基本上实现了一个FTP服务器所应该具有的功能,能够解释一般的FTP命令,并且符合RFC59规范。 本程序采用VC++6.0作为开发工具,设计步骤采用自顶向下的方法。 关键词:客户端;服务器;下载;上传;FTP

目录 第一章引言 (1) 1.1课题背景及意义 (1) 1.2课题研究现状 (1) 1.3研究内容 (2) 第二章FTP协议与原理 (3) 2.1 FTP简介 (3) 2.2 FTP的工作原理 (3) 2.3 FTP运行原理 (4) 2.4 FTP文件传输连接类型 (4) 第三章开发环境及工具介绍 (6) 3.1 C语言概述 (6) 3.2 VC++介绍 (6) 3.3 VC++6.0集成环境介绍 (6) 第四章FTP服务器需求分析 (8) 4.1 FTP文件传输的需求 (8) 4.2应解决的问题 (9) 4.3功能分析 (9) 第五章系统设计与实现 (10) 5.1功能要求 (10) 5.2开发工具 (10) 5.3主要功能与实现 (11) 5.4 菜单栏功能模块 (11) 5.5 查看功能模块 (13) 第六章系统测试 (18) 6.1系统可能出现的问题与不足 (18) 6.2 采用的测试类型 (18) 6.3 测试的过程与结果分析 (18) 总结 (20) 参考文献 (21)

TCP数据包的发送和接收设计报告

湖北工业大学 课程设计报告 设计题目:TCP数据包的发送和接收专业:计算机科学与技术 班级:10计科2班 学号:11 姓名:吕红杰 指导老师:涂军

一.设计题目 发送和接收TCP数据包 二.设计要求 1.正确理解题意; 2.具有良好的编程规范和适当的注释; 3.有详细的文档,文档中应包括设计题目涉及的基础知识、设计思路、程序流程图、程序清单、开发中遇到的问题及解决方法、设计中待解决的问题及改进方向。 三.需求分析 TCP是一种面向连接的、可靠的传输层协议。TCP协议工作在网络层IP协议的基础上。本课程设计的目的是设计一个发送和接收TCP数据包的程序,其功能是填充一个TCP数据包,发送给目的主机,并在目的主机接收此TCP数据包,将数据字段显示显示在标准输出上。 四.具体设计 1.创建一个原始套接字,并设置IP头选项 SOCKET sock; sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP); 或者: sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPE D); 这里,设置了SOCK_RAW标志,表示我们声明的是一个原始套接字类型。 为使用发送接收超时设置,必须将标志位置位置为WSA_FLAG_OVERLAPPED。在本课程设计中,发送TCP包时隐藏了自己的IP地址,因此我们要自己填充IP头,

设置IP头操作选项。其中flag设置为ture,并设定 IP_HDRINCL 选项,表明自己来构造IP头。 setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&Flag, sizeof(Flag)); int timeout=1000; setsockopt(sock, SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout, sizeof(timeout)); 在这里我们使用基本套接字SOL_SOCKET,设置SO_SNDTIMEO表示使用发送超时设置,超时时间设置为1000ms。 2.构造IP头和TCP头 这里, IP头和TCP头以及TCP伪部的构造请参考下面它们的数据结构。typedef struct _iphdr 算校验和的子函数 在填充数据包的过程中,需要调用计算校验和的函数checksum两次,分别用于校验IP头和TCP头部(加上伪头部),其实现代码如下: USHORT checksum(USHORT *buffer, int size) { unsigned long cksum=0; while(size >1) { cksum+=*buffer++; size -=sizeof(USHORT); } if(size ) { cksum += *(UCHAR*)buffer; } cksum = (cksum >> 16) + (cksum & 0xffff); cksum += (cksum >>16);

(完整)实验一-文件传输协议设计要点

实验一:文件传输协议的设计与实现

目录 1.实验设计目的和要求 2.背景知识 3.课程设计分析 4.程序清单 5.运行结果 6.总结

1.课程设计目的和要求 文件传输是各种计算机的网络的基本功能,文件传送协议是一种最基本的应用层协议。它是按照客户或服务器模式进行的工作,提供交式的访问。是INTERNRT使用最广泛的协议之一。以及深入了解计算机网络是建立在TCP/IP网络体系结构上。 用 socket 编程接口编写俩个程序,分别为客户程序和服务器程序 1.掌握TCP/IP 网络应用程序基本的设计方法; 2.用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c); 3.撰写课程设计说明书。装订后的课程设计说明书不少于10面(含封面、任务书、目录、正文、参考文献、成绩评定表、封底)。 2.背景知识 第一个FTP的RFC由A.K.Bhushan 在1971年提出,同时由MIT 与Harvard实验实现,RFC 172提供了主机间文件传输的一个用户级协议。长期发展过程由于底层协议从NCP改变为TCP,RFC765定义了采用TCP的FCP. FTP协议在今天已经发展成熟,应用也越来越广很多开发的比较成熟的FTP 客户端软件已经得到了广泛的应用. 3.课程设计分析 Server端Client端 创建ServerSocket对象,在某端口提供监听服务Client端 等待来自Client端的服务请求 接受Client端的请求,用返回的创建Socket对象,向Server Socket建立连接的监听端口请求 通过向Socket中读写数据来通过向新的Socket中读写数 与Client端通信据来与Server端通信 关闭Socket,结束与Server端的通信关闭

TCP论文文件传输论文

TCP论文文件传输论文 摘要:本文介绍了在linux下基于tcp协议的文件的传输系统的流程与设计。在传输的过程中,服务器(server)上使用了线程池技术实现了多线程的设计,并使用openssl 对所传输文件数据进行加解密,以保证文件传输过程中安全性的需求。 关键词:tcp;文件传输;线程池;openssl tcp-based secure file transmission system design and research liu xianqiang,lin hui,huang chengmao (school of optoelectronic information,university of electronic science&technology,chengdu610054,china) abstract:this article describes the file transmission system processes and design,base on tcp protocol in linux.in the transmission process,the server uses the thread pool technology to achieve the multi-threaded design,and using openssl library to ensure security of the data encryption during file tarnsmission. keywords:tcp;file transmission;thread

基于TCP协议的简单即时通信软件的设计与实现

基于TCP协议的网络通信系统的设计与实现 摘要:网络通信,由于其具有实时性、跨平台性、成本低、效率高等优点而受到广泛的使用。设计并实现一个能够处理多用户进行实时、安全的即时通信系统具有较强的现实意义。即时通信的底层通信是通过SOCKET套接字接口实现的。当前的主流UNIX系统和微软的WINDOWS系统都在内核提供了对SOCKET字接口的支持。使用这个统一的接口,可以编写一个可移植的TCP/IP通信程序。使信息能够在INTERNET上可靠的传输。 本文设计并实现了基于局域网内的简单即时通信系统,系统采用C/S模式,底层通信通过SOCKET套接字接口实现,服务器负责客户端的登录验证,好友信息的保存和心跳报文的发送。客户端采用P2P方式实现消息传递,并能实现文件的传输。本文首先讨论了同步套接字,异步套接字,多线程并发执行任务等;然后阐述了客户端、服务器如何使用XML序列化的消息进行通信。 关键词:即时通信;文件传输;套接字;TCP协议 Abstract :Instant messages have several advantages such as real-time, cross-platform, cheap and efficient. To design a Multi-user IM (instant message) architecture is very i mportant in both theory and realism. Instant message based on TCP/IP protocol that is realized by socket interface. Almost all UNIX operation systems and Microsoft's win dows operation systems provide support of socket in the kernel. Using the uniform int erface, we can develop a portable program of TCP/IP, which help us transfer informati on in Internet safely and credibly. The system uses the client/server(C/S) mode. The server takes the responsibility of th e login message of client, the saving of friend message and Message heartbeat. The tra nsmission of the basic messages of the customer end will be designed on P2P architec ture. This thesis explains how the client and server communicate via serializing XML message. Key words: Instant Message; File Transfer; Socket; TCP protocol

基于tcp协议通信系统的设计与实现

基于TCP协议通信系统的设计与实现 杨秀森 (贵州师范大学机电学院电气工程及其自动化学号:0914********) 摘要:通信协议(communications protocol)是指双方实体完成通信或服务所必须遵循的规则和约定。协议定义了数据单元使用的格式,信息单元应该包含的信息与含义,连接方式,信息发送和接收的时序,从而确保网络中数据顺利地传送到确定的地方。通信的底层通信是通过SOCKET套接字接口实现的。当前的主流UNIX系统和微软的WINDOWS系统都在内核提供了对SOCKET字接口的支持。使用这个统一的接口,可以编写一个可移植的TCP通信程序。 本文设计并实现了基于局域网内的简单即时通信系统,系统采用C/S模式,底层通信通过SOCKET套接字接口实现,服务器负责客户端的登录验证,好友信息的保存和心跳报文的发送。客户端采用P2P方式实现消息传递,并能实现文件的传输。本文首先讨论了同步套接字,异步套接字,多线程并发执行任务等;然后阐述了客户端、服务器如何使用XML序列化的消息进行通信。 关键词:TCP协议;通信协议系统;套接字;文件传输;C/S模式; The System Design and Implementation of Based on TCP Protocol Communication Yang Xiu Sen (Guizhou Normal University Institute of mechanical and electrical engineering and its automation number: 0914********) Abstract: Communication protocol ( communications protocol ) refers to both entities to complete communication or service must follow the rules and conventions. The protocol defines a data unit format, information unit should contain information and meaning, connection mode, information transmission and reception timing, thereby ensuring that the network data smoothly transmitted to determine places. Communication communication is through the SOCKET socket interface implementation. The current mainstream UNIX system and Microsoft WINDOWS system in the kernel provides to SOCKET interface support. Using the unified interface, can be prepared in a transplantable TCP communication program. This paper designed and implemented based on a simple LAN instant communication system, the system adopts C/S model, the underlying communication through the SOCKET socket interface

文件传输协议的简单设计与实现

课程设计 课程名称计算机网络课程设计 题目名称文件传输协议的简单设计与实现学生学院 专业班级____ 学号 学生姓名_______________ 指导教师___________ 2010年1月5日

设计摘要 关键词:SOCKET编程,FTPclient/server程序 摘要:本课程设计包含了文件传输协议的简单设计与实现。 文件传送是各种计算机网络实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。文件传输协议的简单设计与实现建立在计算机网络实验环境TCP/IP 网络体系结构之上,使用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),实现下述命令功能:get , put, pwd, dir, cd, ?, quit 等,利用了已有网络环境设计并实现简单应用层协议。 本设计包括了具体设计任务,基本思路及所涉及的相关理论,设计流程图,调试过程中出现的问题及相应解决办法,实验运行结果,核心程序,个人体会及建议等。

目录 1、文件传输协议的简单设计与实现------------------------------18 1. 1 具体设计任务----------------------------------------------18 1.2 基本思路及所涉及的相关理论--------------------------------18 1.2.1基本思路-------------------------------------------------18 2.2.2 相关理论--------------------------------------------18 1.3设计流程图------------------------------------------------19 1.4实验运行情况----------------------------------------------19 1.5 核心程序--------------------------------------------------22 2.5.1 服务器(sever)程序---------------------------------22 2.5.2 客户(client)程序----------------------------------29 1.6心得体会-----------------------------------------------------------------------------37 参考文献--------------------------------------------------------38

发送TCP数据包设计说明书

发送TCP数据包设 计说明书 一课程设计准备 1.1课程设计目的 TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。TCP协议在网络层IP协议的基础上,向应用层用户进程提供可靠的、全双工的数据传输流。本课程设计的目的就是设计一个发送TCP数据包的程序,并根据本设计说明TCP数据包的结构以及TCP协议与IP协议的关系,使学生对TCP 协议的工作原理有更深入的认识。 1.2课程设计的要求 本程序的功能是填充一个TCP数据包,并发送给目的主机。 1)以命令行形式运行:SendTCP sourse_ip sourse_port dest_ip dest_port 其中,SendTCP为程序名;sourse_ip为源端IP地址;sourse_port为源埠;dest_ip为目的IP地址;dest_port为目的埠。 2)其它的TCP头部参数请自行设定。 3)数据字段为“This is my homework of network,I am happy!”。 4)发送成功后在屏幕上输出”send OK”。

1.3相关知识 编制本程序前要对TCP协议有一定的了解。当应用程序有报文需要通过TCP发送时,它就将此应用层报文传送给执行TCP协议的传输实体。TCP传输实体将用户数据加上TCP报头,形成TCP数据包,在TCP数据包上增加IP头部,形成IP包。下图显示的是TCP数据包和IP包的关系。 TCP协议的传输单元为报文段,其格式如图所示。报文段报头的长度为20B~60B。其中固定长度为20B,报文段长度最多为40B。TCP报文段主要包括以下字段。 ·埠号:埠号字段包括源埠号和目的埠号。每个埠号的长度是16位,分别表示发送该TCP包的应用进程的埠号和接收该TCP包的应用进程的埠号。·序号:长度为32位。由于TCP协议是面向数据流的,它所传送的报文段可以视为连续的数据流,因此需要给每一个字节编号。序号字段的“序号”指的是本报文段数据的第一个字节的顺序号。 ·确认号:该字段的长度为32位,它表示接收端希望接收的下一个TCP 包的第一个字节的序号。

TCP文件传输程序的设计书

TCP文件传输程序设计书 一、实验名称:TCP文件传输程序 二、实验要求 1、设计一个应用程序,该应用程序能够实现网络中两台计算机之间传输文件。 2、一个程序既能够建立服务器又能够以终端的形式连接服务器。 3、终端或者服务器既能够发送文件又能够接收文件。 4、传送文件类型应为任何类型,文件大小为任意。 三、总体规划 1、网络传输协议的选择 在TCP/IP协议栈中,有两个高级协议是我们网络应用程序编写者应该了解的,它们"传输控制协议"(Transmission Control Protocol,简称TCP)和"用户数据报协议"(User Datagrm Protocol,简称UDP)。 TCP是面向连接的通信协议,TCP提供两台计算机之间的可靠无错的数据传输。应用程序利用TCP进行通信时,源和目标之间会建立一个虚拟连接。这个连接一但建立,两台计算机之间就可以把数据当作一个双向字节流进行交换。 UDP是无连接通信协议,UDP不保证可靠数据的传输,但能够向若干个目标发送数据,接收发自若干个源的数据。简单地说,如果一个主机向另外一台主机发送数据,这一数据就会立即发出,而不管另外一台主机是否已准备接收数据。如果另外一台主机收到了数据,它不会确认收到与否。 为了使两台计算机之间传输的文件数据不会丢失或发生错误,应该采用TCP协议。 2、TCP协议在VC++中的实现 在VC++中,网络协议的实现有以下几种方式: a、采用WinSocket API函数。 API函数中提供了基本Socket的系统调用,具体实现方法为服务器端首先要调用socket()函数建立一个流式套接字,用bind()函数与本机的一个端口建立关联,继续调用listen()函数将套接字置于被动的侦听方式以监听连接,然后调用accept()函数进入等待状态之后才可以接收来自客户端的请求,一旦接收到客户端通过connect发出的连接请求,accept将返回一个新的套接字描述符。通过此套接字描述符调用send()或recv()函数即可与客户端进行数据收发。待数据传送完成,服务器客户端调用closesocket()关闭套接字。 该方法在编程过程中需要注意socket连接的整个过程,编程工作量大,编程效率低,单却可以加深对网络协议的认识。 程序流程示意图如下:

文件传输协议

文件传输协议 从Wikipedia,自由的百科全书 文件传输协议(FTP)是一个标准的网络协议,用来在一个基于TCP的网络从一台主机到另一主机传输文件,如互联网。它经常被用来上传到一个公共的Web 托管服务器的网页和其他文件,由私人发展机。FTP是建立在客户端- 服务器架构,并在客户端和服务器之间使用单独的控制和数据连接。[1]在协议中,FTP 用户可能使用明文自己的身份标志,通常以用户名和密码的形式,但如果服务器被配置为允许匿名也可以连接。为了隐藏(加密)您的用户名和密码,以及加密内容的安全传输,您可以尝试以客户端使用SSH文件传输协议。 第一个FTP客户端应用程序是交互式的命令行工具,执行标准的命令和语法。在今天使用的许多流行的桌面操作系统的图形用户界面的客户,至今已开发包括一般的网页设计方案,如Microsoft Expression Web中,如CuteFTP的专业FTP 客户端。 内容 1协议概述 ?1.1与HTTP的差异 ?1.2通信和数据传输 ?1.3登陆 ?1.4 匿名FTP ?1.5穿越NAT和防火墙 2 FTPmail 3 Web浏览器支持 ?3.1句法 4 安全 4.1 安全的FTP

4.1.1 FTPS 4.1.2 SFTP 4.1.3 通过SSH到达FTP (不从SFTP) ? 5 FTP命令的列表 ? 6 FTP 回应码 ?7 参见 ?8 参考文献 ?9 进一步阅读 ?10 外部链接 协议概述 与HTTP的区别 FTP运行在OSI模型的应用层,用于使用TCP / IP传输文件。要做到这一点,FTP服务器必须正在运行,并等待传入的请求。然后客户端的计算机能够沟通服务器上的端口21。就此,称为控制连接,在会议期间仍然开放。第二个连接,称为数据连接,可以由服务器从20端口打开谈判的客户端端口(主动模式),或从任意端口到客户谈判的服务器端口(被动模式)传输文件数据。控制连接用于会议管理,示例命令,识别和使用像一个telnet协议的客户端和服务器之间交换的密码。例如“RETR命令名”从服务器到客户端传输指定的文件。由于这两个端口结构,FTP被认为是一个彻头彻尾的带协议,而不是如HTTP协议波段。 通信和数据传输 该协议在RFC959中指定,这里总结。 服务器响应超过三位数的状态代码的ASCII控制连接与可选的文本消息。例如“200”(或“200 OK”)意味着最后一个命令是成功的。数字代表的响应代码,而可选的文本代表一个人可读的解释或要求(如Need帐户的)。通过控制连接发送中断消息,可以中止正在进行传输文件数据的数据连接。

P2P文件传输平台的设计与实现

《计算机网络程序设计》课程设计报告 题目:P2P文件传输平台的设计与实现 学院:计算机科学与工程学院 专业:信息管理与信息系统 学生姓名: 学号: 指导教师: 2011年3月24日

目录 1.前言 (3) 2.需求分析 (3) 3.概要设计 (3) 3.1硬件环境 (3) 3.2软件环境 (3) 4.详细设计 (4) 5.测试 (6) 6.总结 (6) 参考文献 (6) 附录 (7)

1.前言 近年来,P2P(Peer-to-Peer,对等互联或点对点技术)作为因特网通信应用中一项新兴技术,他的发展迅速。基于P2P方式实现的软件,已经广泛应用于资源的下载、游戏的互动、交互式媒体播放、分布式计算等多种领域,并在越来越多的领域展现了巨大的应用潜力。 但是,到目前为止,仍然没有针对P2P的统一的网络应用开发标准,其体系结构仍在不断地推陈出新。微软公司在.NET Framework 3.5中新增了https://www.wendangku.net/doc/6a17111214.html,.PeerToPeer命名空间,该命名空间下提供的类简化了利用P2P开发应用程序的难度,为创建P2P应用程序提供了简单的实现方法和途径。 在P2P技术尚未风行之前,很多企业级应用采用C/S 或者B/S架构。 在传统的C/S架构的应用程序中,客户端与服务器有明确的分界。客户端软件向服务器发出请求,服务器存放共享资源并对客户端请求作出响应。 P2P的特点: 相对于C/S架构来说,P2P具有以下的特点。 (1)对等模式。P2P系统中的使用者能同时扮演客户端和服务器的角 色,使两台计算机之间能不通过服务器直接进行信息分享。 (2)分布式网络数据存储结构。P2P技术的另一个重要的特点在于 “分散”。网络中所有的计算、存储和网络连接能能力都分 布在非集中式网络的“对等伙伴”上。例如,在C/S架构中, 所有客户端都是直接从服务器下载所有资源。而P2P则改变 了以服务器为中心的状态,玫瑰节点可以先从服务器上各下 载一部分,然后再互相从对方或者其他节点下载其他部分。 采用这种方式,大量客户端同时下载时,不但不会形成服务 器网络宽带瓶颈,造成网络堵塞,反而提高了下载速度。当 然P2P也存在一些缺点。在许多流行的P2P应用中,都或多 或少涉及隐私安全以及版权等问题。 【关键字】P2P,文件传输,.net framwork 2.需求分析 本系统采用基于Socket的局域网通信工具的设计与实现的方法,基于Socket的局域网通信软件可以为企业原有的局域网提供一种良好,安全,快递的通信机制,它的实现无需对企业原有的局域网进行任何改动,具有实现成本低廉的优点,它的使用能有效地降低局域网通信负荷,提高局域网的使用效率,可以很好解决企业内部局域网的各种通信需求。 基于Socket的局域网聊天工具很好地诠释了Socket通信的原理,并且在企业内部通信,教学,讨论应用中有很好的实用价值。它具有信息收发速度快,保密性好,占用网络宽带资源低,占用服务器吞吐能力低,易于编程实现等优点。 聊天系统不外乎两个方面,服务器端和客户端。简单分析一下两个方面所要完成的任务,对设计这个程序来说,等于完成了一半。首先来看 1.下服务器端的任务:

基于局域网的文件传输系统的设计与实现

基于局域网的文件传输系统的设计与实现 摘要 随着互联网技术的迅猛发展,计算机通信给人类文明带来了翻天覆地的变化。很多情况下,人们的日常工作需要借助文件传输来完成。但大多数文件传输功能都需要借助移动磁盘等硬件设备或Internet上的服务器才能实现。这就给那些具有大规模内部网络的用户造成了许多问题,如浪费资金、浪费网络资源、病毒入侵、降低了工作效率等。为了方便局域网内主机的资源共享,需要开发一个基于局域网的文件传输工具,在内部网络中实现文件交换。 基于局域网的文件传输系统的设计选用Delphi 为开发工具,以C/S模式通过建立Socket连接后实现局域网快速,准确,安全的点对点文件以及文件夹传输功能。本系统能够促进局域网内用户之间的文件资源共享,满足主机之间信息交流,确保文件及文件夹传输安全性,有效地提高工作效率。 设计共分为五大模块,分别为:一、介绍选题背景及意义和国内外研究现状; 二、介绍TCP/IP点对点协议技术,C/S架构的Delphi程序设计技术和Socket网络编程技术;三、对当前局域网文件传输进行需求分析并提出解决方案;四、根据解决方案对系统进行设计;五、对基于局域网的文件传输系统进行测试并得到测试结果。 关键词:C/S结构;网络通讯组件;点对点;Socket连接

The Design and Implementation of File Transfer System Based on LAN Abstract Along with the Internet technology swift and violent development, the computer correspondence the human culture has brought the earth-shaking change for. In very many situations, people's routine work needs to draw support from the file transfer to complete. But the majority file transfer function all needs to draw support moves hardware equipment or the Internet and so in the floppy disk server can realize This gave these to have the large-scale internal network user to create many problems, like the waste fund, the waste network resources, the viral invasion, reduced the working efficiency and so on. In order to facilitate in the local area network main engine resources sharing, needs to develop one based on the local area network file transfer tool, realizes the document exchange in internal network. The design and implementation of file transfer system base on LAN uses Delphi development tool,C/S mode through the establishment of Socket after connecting LAN users fast, accurate, the point-to-point security files and folders transmission functions. The system can contribute to LAN users to share file resources to meet the exchange of information between mainframe, ensure that the filets and folders transmission security, effectively improving efficiency. The design is divided into five major module altogether, including: First, introduction selected topic background and significance and domestic and foreign research present situation; Second, introduces the TCP/IP point to point protocol technology, C/S overhead construction Delphi programming technique and the Socket network programming technology; Third, carries on the demand to the current local area network file transfer to analyze and to propose the solution; Fourth, carries on the design according to the solution to the system; Fifth, to carries on based on the local area network file transfer system tests and obtains the test result. Key words:C/S structure; Network communication module; Point-to-point; Socket connection.

基于TCP的文件传输程序

《计算机网络系统实践》报告 设计题目:网络文件传输 学生姓名:郑波 学号:44 专业班级:计算机科学与技术13-2班 2015年12月

一、设计要求 1、实现单线程文件传输功能 2、在以上的基础上,掌握多线程技术,在文件网络传输时,可选择单 线程或多线程 3、加入异常控制机制,增强程序的鲁棒性(Robust) 4、了解如何提高套接字传输的速率,以及如何加强传输的稳定性 二、开发环境与工具 Windows7下Microsoft Visual Stuio 三、设计原理 1、网络传输协议 TCP/IP协议栈中的两个协议: TCP(Transmission Control Protocol):传输控制协议 UDP(User Datagrm Protocal):用户数据报协议 TCP是面向连接的通信协议,TCP提供两台计算机之间的可靠无错的数据传输。应用程序利用TCP进行通信时,源和目标之间会建立一个虚 拟连接。该连接一旦建立,两台计算机之间就可以把数据当做一个双向 字节流进行交换。 UDP是无连接的通信协议,UDP不保证可靠数据的传输,但能够向若干个目标发送数据,接受发自若干个源的数据。就是说,如果一个主机 向另外一台主机发送数据,这个数据就会立即发出,而不管另外一台主 机是否已准备接收数据。如果另外一台主机接收到了数据,它不会确认 收到与否。 本次工程目的是传输文件,显然需要用TCP建立连接,而TCP连接需要“三次握手”。 2、三次握手 三次握手具体过程: 1、客户端主动与服务器联系,TCP首部控制位中的SYN设置为1,发送

带有SYN的TCP段,并把初始序号告诉对方 2、服务端收到带有SYN的报文,记录客户端的初始序号,选择自己的初 始序号,设置控制位中的SYN和ACK。因为SYN占用一个序号,所以 确认序号设置为客户端的初始序号加1,对客户端的SYN进行确认 3、服务端的报文到达客户端,客户端设置ACK控制位,并把确认好设为 服务器的初始序号加1,以确认服务器的SYN报文段,这个报文只是 确认消息,告诉服务器已经成功建立了连接 四、系统功能描述及软件模块划分 1、系统功能描述 软件实现了点对点的文件传输。传输前的接收提醒以及传输过程中的控制。 2、软件模块划分 本程序可以划分成以上三个模块:传输控制模块,文件传输模块和服务连接模块。其中: 服务连接模块用来建立客户端到服务器的连接 文件传输模块主要用两个线程:_SendThread和_ListenThread来完成,实现发送和接收文件的功能。 传输控制模块主要通过封装好的可串行化信息类CMessage互相传递两端的文件操作消息,响应“暂停传输”,“关闭连接”等功能 五、设计步骤 1、服务连接模块 先要建立起客户端与服务器之间的连接,大致过程如下: ①服务器启动: if(m_nServerType == SERVER) { |*.*||",this); "另存为"); strcpy if()==IDOK){ if(m_bIsWait==FALSE){ MessageBox(_T("对方已经取消文件发送"), _T("警告"), MB_ICONEXCLAMATION); return ; } m_bIsClient=FALSE; m_strPath=();

基于socket的文件传输软件的设计与实现

哈尔滨工业大学课程结业报告 姓名:学 陈琳 09S003158 计算机科学与技术网络程序设计 2009-12-20

目录 1.基于TCP/IP及UDP的通信传输概述 (2) 2.系统体系结构 (4) 2.1面向TCP连接系统调用过程 (5) 2.2面向UDP连接系统调用过程 (6) 3.系统要求与功能实现 (6) 3.1公共类设计 (6) 3.1.1 IP地址操作类 (6) 3.1.2 DNS相关类 (7) 3.2 TCP文件传输 (8) 3.2.1 服务器端 (8) 3.2.2 客户端 (9) 3.3 UDP文件传输 (10) 3.3.1 服务器端 (11) 3.3.2 客户端 (12) 3.4线程池 (12) 3.5其它 (13) 4.试验结果 (13) 5.思考 (15) 6.结论和收获 (16)

基于socket套接字的文件传输软件的设计与实现1.概述 TCP/IP(Transmission Control Protocol/Internet Protocol)的简写,中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet 最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP 协议和传输层的TCP协议组成的。TCP/IP协议使用范围极广,是目前异种网络通信使用的唯一协议体系,适用于连接多种机型,既可用于局域网,又可用于广域网,许多厂商的计算机操作系统和网络操作系统产品都采用或含有TCP/IP协议。TCP/IP协议已成为目前事实上的国际标准和工业标准。基于TCP/IP协议组的网络模型分为应用层、传输层、网络层、链路层和物理层这样五个层次。TCP/IP 协议组位于应用程序和硬件之间,指挥数据在网络各层中传递。其中传输层的协议包括传输控制协议(TCP)和用户数据报协议(UDP) ,它们都建立在IP协议的基础上,其中TCP提供可靠的面向连接服务,UDP提供简单的无连接服务。传输层提供端到端,即应用程序之间的通信,主要功能是数据格式化、数据确认和丢失重传等。TCP协议是面向连接的协议,它提供可靠的字节流服务,在进行数据传输之前必须先建立连接,经三次握手确定后才开始数据传送。UDP进行数据报传输使用的是不可靠、无连接的协议。网络层包括互连网协议 IP,互连网控制报文协议 ICMP和互连网组管理协议IGMP。其中IP协议完成大部分的工作,负责数据传输和路由的选择等。I P报头中的地址和网卡相联系( 具体还涉及地址解析和反向地址解析协议),TCP 、UDP报头中的端口号侧对应着网络主机上不同的程序。TCP/IP体系结构如图一所示:

文件传输协议的设计与实现

目录 1.课程设计目的和要求 2.背景知识 3.课程设计分析 4.程序清单 5.运行结果 6.总结 1.课程设计目的和要求 文件传输是各种计算机的网络的基本功能,文件传送协议是一种最基本的应用层协议。它是按照客户或服务器模式进行的工作,提供交式的访问。是INTERNRT使用最广泛的协议之一。以及深入了解计

算机网络是建立在TCP/IP网络体系结构上。 用 socket 编程接口编写俩个程序,分别为客户程序和服务器程序 1.掌握TCP/IP 网络应用程序基本的设计方法; 2.用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c); 3.撰写课程设计说明书。装订后的课程设计说明书不少于10面(含封面、任务书、目录、正文、参考文献、成绩评定表、封底)。 2.背景知识 第一个FTP的RFC由A.K.Bhushan 在1971年提出,同时由MIT 与Harvard实验实现,RFC 172提供了主机间文件传输的一个用户级协议。长期发展过程由于底层协议从NCP改变为TCP,RFC765定义了采用TCP的FCP. FTP协议在今天已经发展成熟,应用也越来越广很多开发的比较成熟的FTP 客户端软件已经得到了广泛的应用. 3.课程设计分析 Server端Client端 创建ServerSocket对象,在某端口提供监听服务Client端 等待来自Client端的服务请求 接受Client端的请求,用返回的创建Socket对象,向Server Socket建立连接的监听端口请求 通过向Socket中读写数据来通过向新的Socket中读写数 与Client端通信据来与Server端通信 关闭Socket,结束与Server端的通信关闭Socket,结束与当前 Client的通信,等待其他请求 关闭ServerSocket对象,结束监听服务

相关文档