搜档网
当前位置:搜档网 › 基于TCP协议的简单即时通信软件的设计与实现(含源文件)

基于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

引言

1.1 课题背景

即时通信是一个终端连往一个即时通信网路的服务。即时通信不同于e-mail 在于它的交谈是实时的。大部分的即时通信服务提供了presence awareness的特性──显示联络人名单,联络人是否在在线与能否与联络人交谈。

最早的即时通信软件是ICQ,ICQ是英文中I seek you的谐音,意思是我找你。四名以色列青年于1996年7月成立Mirabilis公司,并在11月份发布了最初的ICQ版本,在六个月内有85万用户注册使用。

在因特网上受欢迎的即时通信服务包含了MSN Messenger、AOL Instant Messenger、Yahoo! Messenger、NET Messenger Service、Jabber、ICQ 与QQ。这些服务有赖于许多想法更久的(与普遍)的在线聊天媒介,如Internet Relay Chat一样知名。

1970年代早期,一种更早的即时通信形式是柏拉图系统(PLATO system)。之后在1980年代,UNIX/Linux的交谈实时信息被广泛的使用于工程师与学术界,1990年代即时通信更跨越了因特网交流。1996年11月,ICQ是首个广泛被非UNIX/Linux使用者用于因特网的即时通信软件。在ICQ的介绍之后,同时在许多地方有一定数量的即时通信方式发展,且各式的即时通信程序有独立的协议,无法彼此互通。这引导使用者同时执行两个以上的即时通信软件,或者他们可以使用支持多协议的终端软件,如Gaim、Trillian或Jabber。

1.2 国内外研究现状

1.2.1 国外研究现状

当今,国际上对网络通信系统研究的较好的公司有,思科,Sun,Ms等公司,思科主要研究的是底层的传输;MS,Sun公司研究的是应用层。其中ms公司凭借其在操作系统的垄断地位,为了在网络的发展中取得先机,采用了各种各样的手段。但是,其捆绑的msn,无论从功能上,还是技术上来说,都不算是非常先进的。当然,ie,同样也不是很受人青睐,这让人想起了,当年的网景公司,网景只是生不逢时。MS不择手段的想打跨网景,可见其对网络的重视。如今,Sun 公司在网络应用上捷足先登,凭借着Java,Sun在网络的应用上领先于MS。微软,想用同样的办法搞跨对手,因此它拿出了Visual c#,来对抗Java。这些都是在应用层面的开发工具。应用层上的产品就更显种类繁多。ICQ几乎是国际上通用的即时通信工具,由于在我国它的应用不是很广,所以,其原理也很少被介绍。msn,是MS的产品,同样在国内没什么市场,所以,对其原理,也很少被讨论过。至于ie,是在Visual c++下开发的产品,虽然有严重的安全隐患,不过,至少能在某种程度上代表当今国际研究的水平。此外,国际上最近出先了新的浏览器Firefox,其性能据说是远高于ie,也许在网络的天下,Ms又有了更强劲的对手。

1.2.2 国内研究现状

国内在应用层上的网络应用软件目前发展异常的火爆,因为我国有着网络应用的最大的市场,现在国内网络的基础性建设发展迅速,应用软件也层出不穷,其中,在游戏的领域中,网络通信的工作做的不错,如联众游戏平台,还有其他的一些平台,这些平台基本上都是基于VC++的,用的都是Socket通信,但是为了效率,这些平台没有用MFC提供的CSocket类,而是直接用Socket进行通信。所以效率上不错。此外,tencent的即时通信,也是做的很好的,从某中程度上来说,代表了国内最高的水平。

1.3 本课题的研究方法

本系统采用C/S(Client/Server)结构进行设计,使用SQL Server 2000构建数据库,并在.NET环境下使用Visual C#.net语言和SOCKET套接字开发一个基于TCP协议的简单即时通信软件,实现简单的即时聊天,文件传输等功能。

2 相关技术介绍

2.1 .NET开发平台及C#.NET开发语言

NET框架是Microsoft公司推出的一种全新的开发平台,提供了统一的、面向对象并且可以扩展的编程类库和完善的集成开发环境,大大简化了应用程序的开发过程,并且具有良好的移植性和安全性。

微软为了推行.NET战略,特别为.NET平台设计了一种语言——C#。C#是由C和C++派生而来的一种“简单、流行、面向对象、类型安全”的程序设计语言,其综合了Visual basic的高效率和C++的强大功能,然而更多的人感觉C#更类似JA V A。

2.2 TCP协议

2.2.1 TCP/IP网络协议

协议是对等的网络实体之间通信的规则,可以简单地理解为网络上各计算机彼此交流的一种“语言”。网络通信协议设计的基本原则是层次化,层和协议的集合被称为网络体系结构。相邻层之间的接口定义了下层向上层提供的基本操作和服务,下层向上层提供的服务分两种形式:面向连接的服务和无连接的服务。

计算机网络中已经形成的网络体系结构主要有两个:OSI参考模型和TCP/IP 参考模型。TCP/IP参考模型是因特网(Internet)的基础。和OSI的7层协议相比,TCP/IP协议只有4个层次。通常说的TCP/IP是一组协议的总称,TCP/IP实际上是一个协议族,包括100多个相互关联的协议,其中IP(Internet Protocol, 网际协议)是网络层最主要的协议;TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议是传输层中最主要的协议),一般认为IP、TCP、UDP是最根本的三种协议,是其他协议的基础。

2.2.2 TCP——传输控制协议:面向连接的通信可以使用可靠通信,在这时候,第四层协议发送数据接收方的确认,如果未收到数据或者数据被损坏,则请求重新传输。TCP协议就使用这种可靠通信。使用TCP协议的应用层协议包括HTTP、FTP、SMTP和Telnet等。

现在可以发送和接收消息了。接收消息后,总是返回ACK消息。如果在收到ACK之前发送方已经超时,则消息将被放到重发队列中以再次发送。

由于它的握手机制,所以TCP协议比较复杂并且费时,但此协议在处理数据时对数据包的传送有保障,从而使得在应用程序协议中不需要再包括该功能。2.3 套接字

套接字这个术语并没有定义某个协议:它具有两层含义,但两者都与一个协议相关。第一个含义是套接字编程API,它最初由伯克利大学为BSD UNIX而创建。BSD套接字在经过修改后被用作Windows环境的编程接口(并且被命名为WinSock)。WinSock API被包装在https://www.sodocs.net/doc/5014473851.html,.sockets命名空间的.NET类中。Windows Sockets 是一个独立于协议的编程接口,用于编写网络应用程序。

2.4 流

2.4.1 流的基本概念

流的概念已经存在很长时间了。流是一个用于传输数据的对象。数据的传输有两个方向:

1)如果数据从外部源传输到程序中,这就是读取流。

2) 如果数据从程序传输到外部源,这就是写入流。

外部源常常是一个文件,但也不完全都是文件,它还可以是:

1) 网络,使用一定的网络协议与网络上其它计算机或终端交换数据。

2)一个指定的管道。

3) 一块内存区域。

2.5 同步、异步、阻塞和非阻塞

同步(synchronous):所谓同步方式,就是发送方发送数据包以后,不等接受方响应,就接着发送下一个数据包。

异步(asynchronous):异步方式就是当发送方发送一个数据包以后,一直等到接受方响应后,才接着发送下一个数据包。

阻塞(Block):指执行此套接字的网络调用时,直到调用成功才返回,否则此套节字就一直阻塞在网络调用上,比如调用StreamReader 类的Readlin ( )方法读取网络缓冲区中的数据,如果调用的时候没有数据到达,那么此Readlin ( )方法将一直挂在调用上,直到读到一些数据,此函数调用才返回。

非阻塞(Unblock):指在执行此套接字的网络调用时,不管是否执行成功,都立即返回。同样调用StreamReader 类的Readlin ( )方法读取网络缓冲区中数据,不管是否读到数据都立即返回,而不会一直挂在此函数调用上。

在Windows网络通信软件开发中,最为常用的方法就是异步非阻塞套接字。平常所说的C/S(客户端/服务器)结构的软件采用的方式就是异步非阻塞模式的。

其实在用C#进行网络编程中,我们并不需要了解什么同步、异步、阻塞和非阻塞的原理和工作机制,因为在.Net FrameWrok SDK中已经已经把这些机制给封装好了。

3.系统总体设计 3.1 需求分析

软件针对局域网内部用户,实现用户间的即时通信。需要分别实现服务器端和客户端的软件设计。

服务器端负责监听用户连接请求,负责连接数据库存储用户信息,负责发送给用户好友信息,负责发送心跳报文检查用户在线状态并即时让用户更新好友在新信息。

客户端发起主动连接,向服务器请求登录或者注册。客户端可以修改昵称,可以加已知用户为好友(类似于MSN的好友添加功能)。客户端之间可以发起P2P模式的聊天,可以传送文件。

3.2 系统基本架构

基于C/S架构的即时通信软件便于对用户信息进行统一管理和保存,面向特定的用户,对信息的安全控制能力很强。为了减轻服务器负担,客户端之间的信息传递是采用P2P模式的,服务器只负责用户的注册,登录和用户在线状态的检验。基本结构如图:

3.3 功能模块设计

CLIENT:

1.注册:

(1)可以完成客户端注册,客户端可以通过填写信息进行注册,信息被发送到

服务器端。

2.登录:

(1)客户可以输入账号和密码进行登录,客户端会发送登录信息等待服务器响应,登录成功后会发出登录成功信息并刷新好友列表。

3.修改:

(1)密码修改:应该有密码修改功能

(2)信息修改:可以更改一些注册信息

4.通信:

(1)即时聊天模块:客户端与客户端之间建立线程进行即时聊天,也包含有简

单的对称加解密算法功能。

(2)好友列表:可以对好友列表进行添加删除等动作。

5.文件传输:

(1)文件传输:文件传输功能 SERVER:

1.注册回应:

对客户端传送的注册信息进行判断。

(1)HASH加密:对用户的账号和密码信息进行HASH加密

(2)重复用户检查:将加密后信息与已存在账号进行比较,检查是否账号已存在,如果存在就返回错误信息

(3)注册成功:将可成功注册的用户账号和密码写入数据库内,并向客户端返回成功信息

2.修改回应:

(1)对密码和信息修改请求进行判断,执行和返回修改成功信息。

3.登录回应:

(1)对登录的账号和密码进行加密检查后发回正确或错误情况,并记录上线信息。

(2)好友列表发送:给成功登录的账号发送好友列表及好友上线信息。

(3)上线信息发送:给成功登录的账号的好友发送在线信息(包括IP,端口等等信息)。

4.在线情况:

(1)对登录,在线,离线的用户情况进行统计,记录和通知

(2)心跳测试:每隔一段时间发送报文测试用户是否因意外原因离线

(3)情况记录:将用户登录时间,IP,下线时间等信息记录入数据库

3.4 逻辑图:

3.5 数据库设计

3.5.1 实体关系图

服务器是作为记录和读取数据库信息的载体,与客户端关系并不复杂,这里需要重点考虑客户端之间的关系。用户与用户之间的关系是较为特殊的递归关系,即描述发生在两个相同实体上的关系。

4 系统实现

4.1 使用XML定义的即时通信协议

4.1.1 信息结构MESSAGE.CS&UMESSAGE.CS

这两个C#类定义了包括服务器信息,状态信息,注册信息,登录信息,聊天信息或者请求文件传输信息的函数,服务器和客户端通过将它们实例化和序列化再转换成流在网络上进行传输。UMESSAGE.CS主要代码如下:

[Serializable]

public class UMessage {

public UMessage(){ }

private string _nickname;

private string _password;

private string _accounts;

private string _email;

private int _info;//表示注册或者登录信息,客户端信息0为注册,1为登录;服务器返回信息0为用户已存在,1为注册成功,2为服务器未知错误,3为CLIENT 在线检查,10为登录失败,11为登录成功

private Friend[] _friend;

private int _fn;

private string _fg;

public string Nickname

{

get { return _nickname; }

set { _nickname = value; }

}

public string Password

{

get { return _password; }

set { _password = value; }

}

public string Accounts

{

get { return _accounts; }

set { _accounts = value; }

}

public string Email

{

get { return _email; }

set { _email = value; }

}

public int Info

{

get { return _info; }

set { _info = value; }

}

public Friend[] Fri

{

get { return _friend; }

set { _friend = value; }

}

public int Fn

{

get { return _fn; }

set { _fn = value; }

}

public string Fg

{

get { return _fg; }

set { _fg = value; }

}

}

由于MESSAGE.CS与UMESSAGE.CS类似,在此不再详述。

服务器和客户端都可以通过相同的代码对UMESSAGE赋值,再通过XmlSerializer方法进行将UMESSAGE序列化为XML文档,最后将XML文档转化为网络流进行传输。代码如下:

#region 将登录信息转为UMessage

private void Traslator()

{

_message.Accounts=this.TextBox1.Text;

_message.Nickname="";

_message.Password=this.TextBox2.Text;

_message.Email="";

_https://www.sodocs.net/doc/5014473851.html,=1;

_message.Fri=null;

}

#endregion

4.1.2 数据结构FriendStruct

服务器如果保存和传递用户的好友信息是难点之一。数据库的设计和信息的传递辨别都是比较难实现的。

在数据库方面,每个用户拥有各自的好友分组信息(UserFav),分组中间使用“,”分隔,在TCP_FriendInfo表中则分别保存了用户ID和好友ID,使用一个INT字段保存分组信息。数据库以用户ID为标准对好友ID和分组信息进行内连接查询,就可以得到基本的好友信息了。代码如下:

select * from TCP_UserInfo join TCP_FriendInfo on TCP_https://www.sodocs.net/doc/5014473851.html,erID='" + uid + "' and TCP_https://www.sodocs.net/doc/5014473851.html,erID=TCP_FriendInfo.FriendID

在好友信息的传输方面,首先定义一个FriendStruct数据结构(当然也可以用枚举完成)如下:

using System;

using System.Collections.Generic;

using System.Text;

namespace TCP

{

public class FriendStruct

{

public struct FileInfo {

public int filere;//接收和拒绝信息,1为接收,2为拒绝,3为取消 public string filename;

public long filelength;

}

}

public struct Friend

{

public string account;

public string nickname;

public string IP;

public string status;

public string fg;//好友分组

}

}

在MESSAGE.CS或者UMESSAGE.CS中,我们则定义了FriendStruct的数组。在C#中使用DATAREADER语句可以逐句读取数据库查询的结果,再依次将结果赋值FriendStruct数组元素,就得到了便于发送和读取的存放好友信息的数组。赋值代码如下:

while (getf.Read()) //getf即是以上的数据库查询的datareader语句

{

ff[i].account=getf["UserAccount"].ToString();

ff[i].IP = getf["UserIP"].ToString();

ff[i].nickname = getf["UserNickname"].ToString();

ff[i].status = getf["UserOnline"].ToString();

ff[i].fg = getf["FriendGroup"].ToString();

i++;

}

getf.Close();

4.2 数据库连接类

实现一个快捷简单的数据库连接的相关代码是非常有必要的。实现的途径也多种多样,鉴于安全性和复杂性的需求不同,实现方法有简有繁。本设计使用了一个简单的类(UserData.CS)实现了简单快捷的数据库连接和读取。主要代码如下:

public static SqlConnection connStr = new

SqlConnection("Server=D96B85DD938A465.;uid=sa;pwd=change;database=TC PDB");

public static SqlDataReader SqlReader(string sql, SqlConnection connstr) {

SqlDataReader sqldr = null;

SqlCommand cmd = new SqlCommand(sql, connstr);

if (cmd.Connection.State.ToString() == "Closed") cmd.Connection.Open( );

try

{

sqldr = cmd.ExecuteReader();

}

catch (Exception e)

{

catch (Exception e)

{

if (e != null) sqldr = null;

}

return sqldr;

}

//数据库操作连接

public static string SqlCmd(string sql, SqlConnection connstr)

{

string errorstr = null;

SqlCommand sqlcmd = new SqlCommand(sql, connstr);

if (sqlcmd.Connection.State.ToString() == "Open") sqlcmd.Connection.Close();

sqlcmd.Connection.Open();

try

{

sqlcmd.ExecuteNonQuery();

}

catch (Exception e)

{

if (e != null) errorstr = e.ToString();

}

sqlcmd.Connection.Close();

return errorstr;

}

在UserData.CS的基础上,主程序可以更方便地实现数据库连接操作,对数据库进行读写和更新,在此不再详述。

4.3 服务器端

服务器端的界面设计是基于便于测试的目的而实现的。如下图:

4.3.1 同步套接字网络监听

基于同步套接字的网络监听器对服务器来说并不是最好的解决方案,但是仍然可行并且实现简单。主要代码如下:

开启监听端口:

public void Serve()

{

int port = 8888;

ServerIPEP = new IPEndPoint(IPAddress.Any, port);

s = new Socket(ServerIPEP.AddressFamily, SocketType.Stream, ProtocolType .Tcp);

s.Bind((EndPoint)ServerIPEP);

s.Listen(10);

alSock = new ArrayList();

以下代码读取连入的连接,依次将连接加入可变长数组alsock,并且读取传入的信息,进行反串行化:

while (true)

{

try

{

uc = s.Accept();

alSock.Add(uc);

this.tb_states.AppendText(System.Convert.ToString(uc));

byte[] data = new byte[2048];

int rect = uc.Receive(data);

byte[] chat = new byte[rect];

Buffer.BlockCopy(data, 0, chat, 0, rect);

UMessage umessage = (UMessage)_translator.Deserialize(new MemoryS tream(chat));

int info = https://www.sodocs.net/doc/5014473851.html,;

对反串行化后的信息进行处理,通过info参数辨认客户端行为(注册或者登录),对注册的信息进行数据库查询,注册信息可插入,则将用户信息插入数据库,否则返回客户端“注册出错”的信息:

#region 处理用户注册信息

if (info==0)//分辨出用户发送的是注册信息

{

string Accounts = umessage.Accounts;

SqlDataReader usdr = FPara.SqlReader("select * from TCP_UserInfo where UserAccount='" + Accounts + "'", FPara.connStr);

if (usdr != null)

{

if (usdr.Read())

{

#region 此处写入返回注册失败的代码

Socket sc = (Socket)alSock[alSock.IndexOf(uc, 0)];

sc.Send(chat);

#endregion

}

else

{

#region 此处写入插入数据库用户注册信息的代码

Stream ms = new MemoryStream();

Socket sc = (Socket)alSock[alSock.IndexOf(uc, 0)]; if (FPara.SqlCmd("insert into TCP_UserInfo (UserAccount,UserNickname,UserEmai l,JoinDate,UserIP,UserPassword) values('" + umessage.Accounts + "','" + umessage.N ickname + "','" + umessage.Email + "','" + System.DateTime.Now.ToString() + "','" + ((IPEndPoint)uc.RemoteEndPoint).Address.ToString() + "','" + umessage.Password + "')", FPara.connStr) == null)

{

https://www.sodocs.net/doc/5014473851.html, = 1;

_translator.Serialize(ms, umessage);

byte[] d = new byte[ms.Length];

ms.Seek(0, SeekOrigin.Begin);

ms.Read(d, 0, d.Length);

sc.Send(d);

}

else

{

https://www.sodocs.net/doc/5014473851.html, = 2;

_translator.Serialize(ms, umessage);

byte[] d = new byte[ms.Length];

ms.Seek(0, SeekOrigin.Begin);

ms.Read(d, 0, d.Length);

sc.Send(d);

}

#endregion

}

usdr.Close();

}

}

#endregion

如果发现用户发送的是登录信息,就根据登录信息中的用户名和密码判断是否存在用户,密码是否正确,成功后再查询出用户的好友信息并且赋值给FriendStruct,再将信息返回给客户端:

#region 处理用户登录信息

else if (info == 1)//分辨出用户发送的是登录信息

string Accounts = umessage.Accounts;

string Password = umessage.Password;

SqlDataReader usdr = FPara.SqlReader("select * from

TCP_UserInfo where UserAccount='" + Accounts + "' and UserPassword='"+Passwor d+"'", FPara.connStr);

if (usdr != null)

{

if (usdr.Read())

{

string uid=usdr["UserID"].ToString();

umessage.Fg = usdr["UserFav"].ToString();

usdr.Close();

SqlDataAdapter sdr = new SqlDataAdapter("select * from TCP_User Info join TCP_FriendInfo on TCP_https://www.sodocs.net/doc/5014473851.html,erID='" + uid + "' and TCP_UserInfo .UserID=TCP_FriendInfo.FriendID", FPara.connStr);

DataSet ds = new DataSet();

sdr.Fill(ds, "find");

int xxx=ds.Tables["find"].Rows.Count;

FPara.SqlCmd("update TCP_UserInfo set UserIP='" + ((IPEndPoint) uc.RemoteEndPoint).Address.ToString() + "' , UserOnline=1 where UserAccount='" + Accounts + "'", FPara.connStr);

ff=new Friend[xxx];

int i=0;

SqlDataReader getf = FPara.SqlReader("select * from TCP_UserInfo

join TCP_FriendInfo on TCP_https://www.sodocs.net/doc/5014473851.html,erID='" + uid + "' and TCP_https://www.sodocs.net/doc/5014473851.html, erID=TCP_FriendInfo.FriendID", FPara.connStr);

while (getf.Read())

{

ff[i].account=getf["UserAccount"].ToString();

ff[i].IP = getf["UserIP"].ToString();

ff[i].nickname = getf["UserNickname"].ToString();

ff[i].status = getf["UserOnline"].ToString();

ff[i].fg = getf["FriendGroup"].ToString();

i++;

}

getf.Close();

#region 此处写入登录成功代码

Stream ms = new MemoryStream();

Socket sc = (Socket)alSock[alSock.IndexOf(uc, 0)]; this.lb_users.Items.Add(alSock.IndexOf(uc).ToString());

https://www.sodocs.net/doc/5014473851.html, = 11;

umessage.Fri = ff;

umessage.Fn = xxx;

_translator.Serialize(ms, umessage);

byte[] d = new byte[ms.Length];

ms.Seek(0, SeekOrigin.Begin);

ms.Read(d, 0, d.Length);

sc.Send(d);

//在tb_status中写入服务器返回给客户端的代码便于测试观察

this.tb_states.AppendText(System.Text.Encoding.Default.GetString(d));

#endregion

}

else

{

usdr.Close();

#region 此处写入登录失败代码

Stream ms = new MemoryStream();

Socket sc = (Socket)alSock[alSock.IndexOf(uc, 0)];

https://www.sodocs.net/doc/5014473851.html, = 10;

_translator.Serialize(ms, umessage);

byte[] d = new byte[ms.Length];

ms.Seek(0, SeekOrigin.Begin);

ms.Read(d, 0, d.Length);

sc.Send(d);

#endregion

}

}

}

#endregion

Tb_states是个用于监视SOCKET传入信息的文本框,便于观察和测试相关信息: this.tb_states.AppendText("[" + uc.RemoteEndPoint.ToString() + "]" + S ystem.Text.Encoding.Default.GetString(chat));

}

catch (Exception ex) {

MessageBox.Show(ex.Message);

}

}

}

以上代码也包含了对客户端的请求信息的判断和对客户端返回信息的生成和传输。

4.3.2 多线程

对于服务器来说,多线程是必不可少的,否则它将无法处理不断请求的新连接。C#的System.Threading提供了多线程编程的支持。本设计实现代码如下:

this.th = new Thread(new ThreadStart(Serve));//新建一个用于监听的线程

th.Start();//打开新线程

不仅仅是服务器,基于P2P模式聊天的客户端也必须支持多线程运行,实现代码与之类似,在客户端设计说明中将不再叙述。

4.3.3 计时器

计时器用于实现心跳报文的功能,服务器在启动以后就开始计时,每隔一定时间就向所有连入的客户端发送信息,核心代码如下:

//用计时器检查客户端是否掉线

System.Timers.Timer aTimer = new System.Timers.Timer();

aTimer.Elapsed += new ElapsedEventHandler(CheckStatus);

// 设置引发时间的时间间隔此处设置为5秒(5000毫秒)

aTimer.Interval = 5000;

aTimer.Enabled = true;

CheckStatus就是用于向客户端发送检查信息的方法,它会向遍历连入的客户端(alSock),然后依次向客户端发送信息,如果发现客户端没有响应,就会如果发现对方无回应,则关闭相应的SOCKET,并更新数据库的用户在线状态,同时向该用户的所有好友发送用户已下线的通知。

4.4 客户端

4.4 客户端

图5 注册界面

图6 登录、聊天、文件传输界面

4.4.1 同步套接字客户端

客户端发起同步套接字连接,并传送登录或者注册信息,由于两者方式类似,这里仅列出用户登录的代码:

#region 发送服务器登录信息,并接收服务器反馈信息 public void Client() {

建立SOCKET发送信息:

try

{

IPEndPoint ServerIPEP = new

IPEndPoint(IPAddress.Parse("222.18.170.16"),8888);

c = new

Socket(ServerIPEP.AddressFamily,SocketType.Stream,ProtocolType.Tcp);

c.Connect((EndPoint)ServerIPEP);

s = new MemoryStream();

_translator.Serialize(s,_message);

byte[] d=new byte[s.Length];

s.Seek(0, SeekOrigin.Begin);

s.Read(d, 0, d.Length);

int i = c.Send(d, 0, d.Length, SocketFlags.None);

}

catch(Exception ex)

{

MessageBox.Show(ex.Message);

}

以下代码读取了服务器返回给客户端的信息(注册和登录的成功与失败),如果返回了登录成功的信息,还会读取服务器给出的FriendStruct结构以得到用户的好友信息:

#region 接收反馈信息

byte[] data = new byte[2048];

while(true)

{

int rect = c.Receive(data);

byte[] chat = new byte[rect];

Buffer.BlockCopy(data,0,chat,0,rect);

UMessage bumessage = (UMessage)_translator.Deserialize(new MemoryStream(chat ));

string[] fg;

string _fg=bumessage.Fg;

if(https://www.sodocs.net/doc/5014473851.html,==3)

{

}

else if(https://www.sodocs.net/doc/5014473851.html,==11)

{

fg=_fg.Split(',');

int xxx=bumessage.Fn;

ff=bumessage.Fri;

for(int i=0;i

{

string[] ems=new string[5];

ems[0]=ff[i].account;

ems[1]=ff[i].nickname;

ems[2]=fg[int.Parse(ff[i].fg)];

ems[3]=ff[i].IP;

ems[4]=ff[i].status;

ListViewItem item = new ListViewItem(ems);

this.listView1.Items.Add(item);

}

CSERVER是一个用于开启监听P2P信息的方法,客户端在登录成功以后就会立刻开启监听器,才能够实现与其它客户端的聊天:

Th = new Thread(new ThreadStart(CServer));//新建一个用于监听其它客户端信息的线程

th.Start();//打开新线程

MessageBox.Show(bumessage.Accounts+"登录成功!");

this.Button1.Enabled=false; this.Button3.Enabled=false;

}

else if (https://www.sodocs.net/doc/5014473851.html,==2)

{

MessageBox.Show("服务器未知错误");

}

else

{MessageBox.Show(https://www.sodocs.net/doc/5014473851.html,.ToString());}

} #endregion

} #endregion

客户端之间的聊天同样使用了序列化的XML文档,用户在登录成功后就会启动一个新的监听器去监听其它客户端传入的聊天信息并且进行判断再将其它用户的聊天信息显示在界面上。这里也不再阐述代码。

.4.2 采用异步套接字的文件传输

文件传输是通过一个类库实现的。由于文件传输的代码实现复杂,通过类库可以大量的简化代码,使主程序简洁易懂。类库https://www.sodocs.net/doc/5014473851.html,working包括了ClientBase.cs,ClientInfo.cs,Delegates.cs,INPClient.cs,INPServer.cs,ClientBase.cs定义了基础的文件发送函数,INPClient.cs则仅包含初始化文件

送的函数;ServerBase.cs和INPServer.cs则是反之亦然。核心代码如下:ClientBase.cs:这个类实现了套接字的开启和数据的传输

ClientBase.cs:这个类实现了套接字的开启和数据的传输

using System;

using https://www.sodocs.net/doc/5014473851.html,;

using https://www.sodocs.net/doc/5014473851.html,.Sockets;

namespace https://www.sodocs.net/doc/5014473851.html,working {

///

/// ClientBase摘要.

///

public class ClientBase

{

private const int BUFFERSIZE = 4*1024;

private int _port; private string _serverIP;

private Socket _mainSoc;

private ClientInfo _info;

private AsyncCallback _dataRecievedCallback;//异步回调方法

public event NetworkEventHandler DataRecieved;//定义一个事件:接收到数据时引发事件

public ClientBase(string serverIP,int port)

{

_serverIP = serverIP;

_port = 11000;

_mainSoc = new Socket(

AddressFamily.InterNetwork,

SocketType.Stream,

ProtocolType.Tcp);

_info = new ClientInfo(

_mainSoc,

new byte[BUFFERSIZE]);//ClientInfo包含了建立的套接字和套接字读取的BYTE大小

_dataRecievedCallback = new

AsyncCallback(OnDataRecieved);//异步回调

}

// 可重写为其它超类实现更强大的功能,例如断点续传

public virtual void OnDataRecieved(byte[] data)

{

if (DataRecieved != null)

{

DataRecieved(this,

new NetworkEventArgs(_info));

}

}

public void Send(byte[] data)

{

_mainSoc.Send(data);//发送数据

}

public void Connect()//建立与远程主机的连接 {

_mainSoc.Connect(

new IPEndPoint(

IPAddress.Parse(_serverIP),

_port));

}

public void Disconnect()//关闭连接

{

if (_mainSoc.Connected)

_mainSoc.Shutdown(SocketShutdown.Both); }

public void WaitForData()

{

// 垃圾回收

GC.Collect();

int byteCount = 0;

byteCount = _mainSoc.EndReceive(ar);

if (byteCount == 0)

{ // 服务器断开连接.

} else

{

OnDataRecieved(_info.Buffer);//接收到了数据 WaitForData();

}

}

}

}

INPClient.cs 派生类INPClinet:

using System; using System.IO;

namespace https://www.sodocs.net/doc/5014473851.html,working

{

///

/// INPClient的摘要. ///

public class INPClient :

ClientBase

{

public INPClient(string serverIP,int port) :

base(serverIP,port) ;

{}

public void SendFile(string fileName)//发送文件类,开启一个文件流,将文件流依次读入,再使用CLIENTBASE类中的数据发送方法进行发送 {

FileStream fs = new FileStream(

fileName,FileMode.Open);//根据传入的参数打开文件

byte[] im = new byte[fs.Length];//根据文件长度定义一个BYTE

fs.Read(im,0,im.Length);//将文件流中读取字节块写入相应缓冲区 base.Send(im);//使用基类(CLIENTBASE)的数据发送方法进行文件传送 }

}

}

INPSERVER和SERVERBASE与INPCLIENT和CLIENTBASE类似。

结论

即时通信是是网络发展的必然趋势,它的技术仍然在不断的改进和蓬勃发展中。本次设计虽然实现了简单的即时通信功能,但是从很多方面来说都是不完善的:实现了字符聊天却没有实现多媒体即时通信;实现了同步套接字聊天和异步套接字传送文件却没有实现更科学的异步套接字聊天和同步套接字传送文件。

在本次设计中,我深刻体会到SOCKET编程的基础性,多样化。由于与网络紧密联系,SOCKET编程的也可能出现各种未知的问题,需要我们更深入地了解网络协议和架构,才可能做出通用性高,稳定性高的即时通信程序。

参考文献

[1] Tobin. Titus, Fabio Claudio Ferracchiati. C#线程参考手册[M].王敏译.北京:清华大学出版社,2003。

[2] 黄承安,谢东文,许聪. C#网络应用案例导航[M].北京:中国铁道出版社,2003。

[3] Andrew Krowczyk, vinod Kumar. .NET网络高级编程[M].北京:清华大学出版社,2003。 [4] 周存杰. Visual C# .NET网络核心编程[M].北京:清华大学出版社,2002。 [5] 方睿,吴四九,刁仁宏. 网络数据库原理及应用[M].四川:四川大学出版社,2005。 [6] 李文志,申剑,卢方国,柳正青,王宏,陈建伟. 在.NET框架下开发一个即时通信系统[J].现代计算机.2004(2):68-72。

[7] 王跃. INTERNET上大规模用户即时通信方法研究[D].北京:北京工业大学[硕士论文],2004。

即时通讯软件的发展及其现状

摘要 近一、两年来,即时通讯软件(InstantMessenger)的发展突飞猛进。在短短的几年内,网络即时通信大有取代传统通信方式之势。继电子邮件之后,即时通讯对我们的通信方式又进行了一场革命,这种革命甚至延续到了我们的感情领域,只要双方都在互联网上。即时通讯所拥有的实时性、跨平台性、成本低、效率高等诸多优势,使之日益受到网民们的喜爱。随着互联网成长起来的“e一代”,在交换联系方式时已经习惯了交换QQ号。 本文介绍了网络即时通讯软件的发展过程及现状,五种最常用的即时通讯软件,以及即时通讯软件的最新发展。 关键字:即时通讯;网络发展;软件

目录 摘要 (1) 一、即时通讯 (3) (一)概要 (3) (二)即时通讯软体 (4) 二、国内常用的五种即时通讯软件 (4) (一)QQ (4) (二)MSN (5) (三)阿里旺旺 (6) (四)百度hi (6) (五)POPO (7) 三、即时通信软件的现状 (8) 四、即时通信行业发展趋势 (9) 五、总结 (10)

一、即时通讯 即时通讯(Instant messaging,简称IM)是一个终端服务,允许两人或多人使用网路即时的传递文字讯息、档案、语音与视频交流。分电话即时通讯手机和网站即时通讯代表百问https://www.sodocs.net/doc/5014473851.html,,手机即时通讯代表是短信,视频即时通讯如QQ,MSN,百度hi等应用形式。 (一) 概要 即时通讯是一个终端连往一个即时通讯网路的服务。即时通讯不同於e-mail在於它的交谈是即时的。大部分的即时通讯服务提供了presence awareness的特性──显示联络人名单,联络人是否在缐上与能否与联络人交谈。 在早期的即时通讯程式中,使用者输入的每一个字元都会即时显示在双方的萤幕,且每一个字元的删除与修改都会即时的反应在萤幕上。这种模式比起使用e-mail更像是电话交谈。在现在的即时通讯程式中,交谈中的另一方通常只会在本地端按下送出键(Enter或是Ctrl+Enter)後才会看到讯息。 在网际网路上受欢迎的即时通讯服务包含了MSN Messenger、AOL Instant Messenger、Yahoo! Messenger、NET Messenger Service、Jabber、ICQ与QQ。这些服务有赖於许多想法更久的(与普遍)的缐上聊天媒介,如Internet Relay Chat一样知名。 1970年代早期,一种更早的即时通讯形式是柏拉图系统(PLATO system)。之後在1980年代,UNIX/Linux的交谈即时讯息被广泛的使用於工程师与学术界,1990年代即时通讯更跨越了网际网路交流。1996年11月,ICQ是首个广泛被非

仓库管理系统设计(案例)

北京航空航天大学 机械工程及自动化学院 仓库管理系统数据库设计《数据库原理及应用》大作业 班级: 学号: 姓名: 2013-12-27

目录 摘要 (4) 关键字 (4) 引言 (5) 1.需求分析 (6) 2.2 引言 (6) 2.2需求分析阶段的目标与任务 (7) 2.2.1 处理对象 (7) 2.2.2 处理功能及要求 (7) 2.2.3.安全性和完整性要求 (8) 2.3需求分析阶段性成果 (8) 2.3.1 体会与收获 (8) 2.3.2仓库管理系统业务流程图 (9) 2.3.3 仓库管理系统数据流程图 (9) 2.3.4仓库管理系统数据字典 (13) 2.3.5 处理逻辑描述 (15) 3.概念设计阶段 (16) 3.1 引言 (16) 3.2任务与目标 (16) 3.3 阶段结果 (17) 4.逻辑设计阶段 (20) 4.1 逻辑设计的任务与目标 (20) 4.2 数据组织 (20)

4.2.1 将E-R图转换为关系模型 (20) 4.2.2 数据库模式定义 (22) 4.2.3 用户子模式的定义 (25) 4.3 数据处理 (26) 5.物理设计阶段 (27) 5.1 物理设计阶段的目标与任务 (27) 5.2数据存储方面 (27) 5.3 系统功能模块 (27) 5.3.1 货物基本信息的查询与更新模块 (27) 6.数据库实施阶段 (29) 6.1建立数据库、数据表、视图、索引 (29) 6.1.1 建立数据库 (29) 6.1.2 建立数据表 (29) 6.1.3 建立视图 (32) 6.1.4 建立索引 (32) 7.心得体会 (33)

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

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)

关于阿里钉钉软件使用分析范文

关于阿里钉钉软件的使用报告 一、阿里钉钉软件功能介绍 钉钉由阿里巴巴集团于2014年1月筹划启动,由阿里巴巴来往产品团队打造,提出的口号是“专注于提升中国企业的办公与协同效率”,目前通过近20个版本的更新,已经更新至3.4.6版本。 1.1、即时聊天工具 即时聊天工具,消息可以发送语音和短信,可以多平台同步,并依赖手机实现消息必达,消息可查看被查阅状态,在软件中这种即时聊天工具被称为“DING”,发出的DING消息将会以免费电话、免费短信、系统提醒等的方式通知到对方,无论对方是否安装钉钉,都可以做出回应,并及时显示。消息也可以设置成为匿名模式即软件中的“密聊”,进入密聊,头像和昵称都会打码(截屏无用);所有消息阅读后30秒自动焚毁,消息不允许复制、转发,不留存,有三个私密等级可以设置。 1.2、企业群和通讯录 企业群和通讯录,通讯录实名制,组织机构可以分级管理,人员激活采用短信方式;

1.3、会议系统 移动电话会议系统和视频会议,支持多方移动通话会议,有条件免费使用。 1.4、公告 公告,支持公告发送到不同终端,也可转化为必答消息,可查看查阅状态,公告可以设为加密方式; 1.5、智能设备 主要为外接打卡机或者手机登设备 1.6、签到考勤 签到考勤,支持地图实时GPS定位提交考勤位置,支持无线WIFI接入提交,支持实拍现场图像见证; 1.7、钉盘功能 钉盘功能、钉盘提供企业内部人员使用,云盘数据可转化为消息传阅,所有数据可以导出; 1.8、审批 流程审批,可灵活设置审批事项和审批人,并可自定义设置或新增审批事项并可统计查询。

1.9、日志 工作日志,可实现员工工作日报、周报、月报等工作汇报,可查看统计。 1.10、报表 智能报表,提供给管理员及负责人查询统计各种数据情况; 1.11、开放接口 开放开发平台,可以自主开发微应用,通过加密接口,可和公司内部系统进行数据交互; 1.12、权限设置 权限可以分级管理功能,云盘分区安全存储功能; 1.13、其他应用 数据采用加密存储和传输,云端安全防护(需使用第三方付费开发软件);多中企业管理软件(第三方有条件免费使用) 1.14、支持平台 IOS(苹果手机系统)、Android(安卓手机系统)、Windows、MAC(苹果电脑操作系统),提供手机端及PC后台管理功能。

网络协议实践课程设计报告-

成都信息工程学院网络工程系 《网络协议实践》 课程设计报告 签名:

目录 第一章 TCP和ARP协议基础............................................................................... 错误!未定义书签。 1.1什么是TCP协议........................................ 错误!未定义书签。 1.2TCP报文类型与格式 .................................... 错误!未定义书签。 1.3什么是ARP协议........................................ 错误!未定义书签。 1.4ARP报文类型和结构 .................................... 错误!未定义书签。第二章抓包验证TCP协议和ARP协议.............................................................. 错误!未定义书签。 2.1实验环境.............................................. 错误!未定义书签。 2.2实验步骤与抓包结果分析................................ 错误!未定义书签。 2.3实验结论.............................................. 错误!未定义书签。第三章 OSPF路由协议验证分析.. (3) 3.1实验环境及工具介绍 (9) 3.2实验步骤及抓包结果分析 (10) 3.3实验结论--OSPF运行过程说明 (12) 3.4实验心得体会 (12)

即时通讯工具的异同

即时通讯工具的异同 不同点 腾讯QQ 腾讯是中国最早的互联网即时通信软件开发商,是中国的互联网服务及移动增值服务供应商,并一直致力于即时通信及相关增值业务的服务运营。腾讯QQ已形成为国内用户最多的个人即时通信工具,2004年腾讯QQ推出了2004Beta2新版本,在软件功能上作了较大的改进,它的发展引导着国内即时通讯软件的发展方向。 作为国内即时通讯软件的老大,QQ2004 II Beta2版本增加了多项耳目一新的功能,如魔法表情、影片截图(图14)、多人语音、网络记事本等等。 MSN MSN是微软公司开发的即时聊天工具,由于微软产品用户众多,MSN操作简单运行稳定,因此MSN的普及速度非常之快,现在已经是世界主流的聊天工具,并且功能越来越强大,最近推出了7.0版本。 喜欢写文字的朋友如果拥有MSN的.NET PassPort账号可以去申请MSN最新提供的MSN Spaces空间,让自己也成为网络博客。另外MSN7.0还增加了MSN Today的对话框,可以让用户即时看到MSN网站上提供的最新服务。 雅虎通 雅虎通(Yahoo! Messenger)是一种免费的消息服务,它允许用户与朋友、家人、同事及其他人进行即时的交流。使用即时消息可以与朋友交谈,并能发现他们何时在线。雅虎通内置了股票、新闻、和记分板等选项卡,这样不论用户在何处浏览因特网,都可以始终监视用户所有个性化信息。使用最新的雅虎通6.0版本,还可以获得1G大小的雅虎邮箱。 雅虎通推出了免费向使用6.0版本的用户提供1G邮箱的服务,并且全部免费发送手机短信,它在免费功能上打出了一张亮牌!而在功能上内置了一搜网的搜索引擎,便于用户即时查找网络资源。 TOM-Skype TOM-Skype是TOM在线和Skype Technologies- S.A.联合推出的互联网语音沟通工具。Tom-skype采用了最先进的P2P 技术,为您提供超清晰的语音通话效果,使用端对端的加密技术,保证通讯的安全可靠。您无需进行复杂的防火墙或者路由等设置,就可以顺利安装轻松上手。TOM-Skype可以免费的直接呼叫全世界的朋友的软件,服务提供商是互联网上免费的电话公司。用户只需要花几分钟时间下载软件、注册TOM-Skype账户,便可以插好耳机、麦克风、或者与TOM-Skype配套的USB电话,开始像打电话一样呼叫朋友了。TOM-Skype的功能和前面五款软件相比,聊天和多媒体功能没有那么丰富,而在它所特有的通话功能技术开发上独树一帜,具有领先的P2P技术、穿透防火墙、安全加密、跨平台使用的特点。 新浪UC 新浪UC是新一代开放式即时通讯娱乐平台,它采用自由变换场景、个性在线心情等人性化设计,配合视频电话、信息群发、文件互传、在线游戏等使用户在聊天的同时能边说、边看、边玩,从而带给用户前所未有的聊天新感觉。 新浪UC的用户则可以根据自己在线时间的长短获得免费的网络硬盘空间,最大支持120M,每天免费发送15条手机短信,并可直接用该账户享受新浪网的游戏、多媒体同学录、聊天室等服务。只要打开UC咨询通还可以即时获得最新的新闻信息,查看天气预报等。

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);

五款主流即时通讯软件分析

纵观近年来国内即时通讯软件市场,QQ在较长时间内一直因贴近国人需求而一枝独秀。与此同时,功能越来越强大的MSN Messenger其市场份额也在扩大,Yahoo Messenger也有一定的用户,而在语音通话和界面简洁方面各有特色的Google Talk和Skype,也牢牢抓住了一些网民的心。在接下来的部分中,我们将这5款IM软件进行横向评测。所有参评的软件均已更新到最新版。(Yahoo! Messenger 因8.0 beta 多次安装失败,采用了7.x系列的最新版) 图目前国内用户较常见到的五款主流即时通讯软件 ★联系人容量 Windows Live Messenger 联系人数目从75、150升级到300人,目前是600人,与QQ相当。而Yahoo Messenger在8.0中通过插件,已经可以达到1000人。Google Talk联系人数目和Gmail一样,超过5000,上限未知。Skype联系人上限未见报道,小编多方查询也未知道结果。 500-600的联系人容量对于日常使用来说已经够用,但这个数字经过长时间的积累,也会慢慢耗尽。当然,如果你是IM狂人当然另当别论了。 ★安装程序及安装后文件夹体积 对于功能,当然是强大的好;但是软件体积,还是精简些比较好。QQ和Google Talk在体积方面显然是两个极端:随着QQ功能的逐步增多,比如TM、QQ音乐、3D秀等,腾讯也想把所有的功能都打包进去,自然造成了安装程序和程序文件夹体积的增大。而Google Talk非常简洁,安装文件竟然只有1.3兆,安装后文件夹内居然只有主程序、卸载程序两个文件,可谓精简至极。 图五款IM软件的安装包及安装后体积(单位:兆) 尽管当今宽带普及,用户的硬盘空间也是越来越大,人们大可不必为这几十兆空间太伤头脑;但空间占用超过平均水平太多的IM软件无疑会令相当一批用户感到臃肿。 ★运行内存占用

网络协议课程设计报告

目录 1.课程设计目的 ---------------------------------------------------- 2 2.课程设计要求 ---------------------------------------------------- 2 3.课程设计题目分析 ------------------------------------------------ 2 3.1 网卡设置 -------------------------------------------------- 2 3.2 程序设计 -------------------------------------------------- 3 3.2.1 使用原始套接字------------------------------------------ 3 3.2.2 接收数据包---------------------------------------------- 4 3.2.3 定义IP头部的数据结构---------------------------------- 4 3.2.4 IP包的解析 --------------------------------------------- 5 4.解析IP数据包设计相关知识 -------------------------------------- 5 5.程序流程图------------------------------------------------------- 6 6.程序设计--------------------------------------------------------- 7 6.1 协议的定义 ------------------------------------------------ 7 6.2捕获处理--------------------------------------------------- 7 6.3 运行界面 -------------------------------------------------- 8 7.实验结果--------------------------------------------------------- 9 8.自我评析和总结 -------------------------------------------------- 9 8.1 实训心得-------------------------------------------------- 9 8.2 实训日记-------------------------------------------------- 9 9.主要参考资料 -------------------------------------------------- 10 [2]《网络协议分析》寇晓蕤罗俊勇编著机械工业出版社--------- 10 [3]《C语言程序设计》张建伟李秀琴主编科学出版社--------- 10 [4]《C++程序设计教程——面向对象分册》郑秋生主编 --------- 10电子工业出版社 -------------------------------------------------- 10 10.附录 ---------------------------------------------------------- 10

仓库管理系统毕业设计任务书

××大学网络教育学院 毕业设计(论文)任务书 题目:仓库管理系统设计与实现 完成期限:年月日至年月日 教学中心年级及层次 专业指导教师_____________ 学生学号 接受任务日期批准日期_____________

一、原始依据(资料) 随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。随着经济文化水平的显著提高,人们对生活质量及工作环境的要求也越来越高。如何通过计算机为我们完成更多的事情,进而达到办公自动化和优化日常工作的目的,也就成了一个大众化的课题。 仓库管理是与我们日常生活息息相关的问题。大到公司、超市的仓库管理,小到图书馆的藏书管理,都可以认为是各种各样的仓库管理需求。随着我国改革开放的不断深入,经济飞速的发展,企业要想生存、发展,要想在激烈的市场竞争中立于不败之地,没有现代化的管理是万万不行的,仓库管理的全面自动化、信息化则是其中极其重要的部分。为了加快仓库管理自动化的步伐,提高仓库的管理业务处理效率,建立仓库管理系统,尽可能地减少仓库管理的重复性和低效性,已变得十分必要。 数据库技术产生于60年代,40多年来数据库技术得到了迅速发展,并已形成较为完整的理论体系和一大批实用系统。并且,近年来,随着World Wide Web(WWW)的猛增及Internet技术的迅速发展,数据库技术成为最热门技术之一。面向对象软件的开发技术,也大大保障了软件开发的速度和效果。随着计算机的普及,计算机等硬件价格也已经不再是什么天文数字。因此,不管是从技术上,还是经济上,设计和开发一个仓库管理系统都已经具有较好的可行性。

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

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

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

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

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

条形码仓库管理系统设计方案(标准版)

完美WORD格式 条形码仓库管理系统(标准版) **************有限公司

一、系统介绍 (4) 1.1条码的作用 (4) 1.1.1 为何引入条码 (4) 1.1.2 如何引入条码 (4) 1.2 系统特色 (5) 1.3 效益分析 (5) 二、系统架构 (6) 三、软件架构 (7) 四、系统主流程 (8) 4.1 入库处理流程 (8) 4.2 出库处理流程 (8) 4.3 仓库盘点处理流程 (9) 五、功能模块 (10) 5.1 基础数据设置 (10) 5.1.1 编码设置 (10) 5.1.2 仓库设置 (10) 5.1.3 库存品档案 (10) 5.1.4 供应商档案 (10) 5.1.5 客户档案 (10) 5.1.6 出入库类别设置 (10) 5.2 入库管理 (10) 5.2.1 入库单 (10) 5.2.2 入库单管理 (10) 5.3 出库管理 (10) 5.3.1 出库单 (11) 5.3.2 出库单管理 (11) 5.4 库存管理 (11) 5.4.1 库存查询 (11) 5.4.2 盘点表 (11) 5.4.3 盘点管理 (11) 5.8 PDA 功能模块 (11) 5.8.1 入库功能 (11) 5.8.1.1 入库扫描 (11) 5.8.1.2 入库扫描管理 (11)

5.8.2 出库功能 (12) 5.8.2.1 出库扫描 (12) 5.8.2.2 出库扫描管理 (12) 5.8.3 盘点功能 (12) 5.8.3.1 盘点选择 (12) 5.8.3.2 盘点扫描 (12) 5.8.3.3 盘点扫描管理 (12) 5.9 系统设置 (12) 5.9.1 企业信息设置 (12) 5.9.2 系统用户管理 (12) 5.9.2.1 用户密码更改 (12) 5.9.2.2 用户设置 (13) 5.9.2.3 用户权限设置 (13) 六、硬件介绍 (13) 6.1 T-462M/T443M 条码打印机 (14) 6.2 PT-990RWB数据采集器 (15) 七、系统报价 (16)

基于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

计算机网络课程设计利用java实现UDP协议

?????? 计算机网络课程设计利用java 实现UDP协议 系别计算机与通信工程学院 专业计算机科学与技术 学号4110415 姓名张振 指导教师王聪 2014年7月4日

1.需求分析 程序是如何通过网络进行相互通信的呢?各个孤立的工作站或主机用物理链路相连在一起,组成数据链路,从而达到资源共享和通信的目的,就形成网络。通信是人与人之间同过某种媒体进行的信息交流与传递。网络通信一般指网络协议。当今网络协议有很多,其中基本最常用的就是TCP/IP 协议族。UDP 协议就是属于TCP/IP协议族中的协议。在网络中它与TCP协议一样用于处理数据包。在OSI模型中,UDP协议在第四层——传输层,处于IP协议的上一层。与TCP 相比,UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。 本文利用Java语言网络编程的思想,编写UDP协议程序,实现UDP协议在网络中所要完成的功能。在Java语言为实现程序的相互通信提供了许多有用的抽象应用程序接口(API, Application Programming Interface),这类应用程序接口被称为套接字(sockets)。 因此,本文UDP协议的编程所需要用到的接口就是套接字。 2.实验环境 开发环境: 个人PC+win8.1+myeclipse 10 3.实验原理以及相关内容 3.1 UDP简介 UDP 是User Datagram Protocol的简称,中文全称是用户数据包协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。在网络中它与TCP协议一样用于处理数据包。在OSI模型中,UDP协议在第四层——传输层,处于IP协议的上一层。与TCP相比,UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。 3.2 使用UDP原因 UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议 所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。 这是因为UDP 有以下特点: (1)UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时 就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。 (2)由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等, 因此一台服务机可同时向多个客户机传输相同的消息。 (3)UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额 外开销很小。 (4)吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、 源端和终端主机性能的限制。

基于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

网络协议分析课程设计

课程设计(大作业)报告 课程名称:网络协议工程 设计题目:网络构建与协议分析 院系:信息技术学院 班级: 设计者: 学号: 指导教师: 设计时间: 信息技术学院

昆明学院课程设计(大作业)任务书

网络构建及分析 一、题目分析 1. 在S2126与S3750B上划分VLAN,并把PC机与服务器加入到相应的VLAN中。 2. 配置S2126与S3750A之间的两条交换机间链路,以及S3750A与S3750B之间的交换机间链路。 3. 在S2126与S3750A之间的冗余链路中使用STP技术防止桥接环路的产生,并通过手工配置使S3750A成为STP的根。 4. 为S3750A的VLAN接口和R1762的接口配置IP地址。 5.在S3750A上使用具有三层特性的物理端口实现与R1762的互联。 二、总体设计 三、实验器材 1、网络环境

根据具体协议构建合适的网络环境 2、操作系统 WindowsXP,如果需要,安装相应的服务(如FTP,SSH,TELNET,HTTP等) 3、协议分析工具 Windows环境下常用的工具有:Sniffer Pro、Ethereal、Iris以及Packet Tracer 等。实验中可具体选择一种协议分析工具,本实验选择Ethereal。 四、制作步骤 1、分析实验设计要求,进行初步的规划; 2、按照要求的网络拓扑图在思科模拟器上进行对网络拓扑图的连接,此处要特 别注意对设备和连接线的选择; 连线时要特别注意选用的线的种类:同种设备之间互联使用交叉线,不同种设备互联使用直通线。 3、按照实验的要求,对模拟好的拓扑图进行内部的配置和设置 4、进行设置和配置的检测,对实验的结果进行分析 五、分析网络中可能用到的网络协议 可能用到的网络协议有: 应用层DNS, FTP,HTTP, RIP, DHCP 传输层TCP, UDP 网络层IP,ICMP,IGMP 数据链路层ARP,RARP 物理层以太网,RS-232 .路由协议(RIP):路由协议主要运行于路由器上,路由协议是用来确定到达路径的,它包括RIP,IGRP,EIGRP,OSPF。起到一个地图导航,负责找路的作用。它工作在网络层。路由选择协议主要是运行在路由器上的协议,主要用来进行路径选择。 FTP:FTP(File Transfer Protocol, FTP)是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录。 HTTP:HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。HTTP是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。 IP: IP是英文Internet Protocol(网络之间互连的协议)的缩写,中文简称为“网协”,也就是为计算机网络相互连接进行通信而设计的协议。 ARP:在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议栈中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协

相关主题