UDP传输

2024-10-03

UDP传输(精选4篇)

UDP传输 篇1

1协议概述

1.1 TCP协议和UDP协议

TCP协议是面向连接的、基于字节流的传输层通信协议,一般用于局域网内部实现客户端与服务器端信息的可靠传输;UDP协议是面向无连接的、不可靠的传输层通信协议,用来支持那些需要在计算机之间传输数据的网络应用。

1.2优缺点比较

(1)TCP协议是可靠传输协议,能确保主机间数据传输的完整性。TCP包头含有多个控制位,当建立连接后,TCP按既有顺序发送数据包,接收方需要向发送方确认数据包的接收,当发送方迟迟收不到接收方的确认,TCP还具有超时重发等机制。TCP协议因多了很多安全验证机制,导致传输速度较慢,而且在点对点传输的实际应用中有很多局限性;

(2)UDP协议是面向非连接的,是不可靠传输协议。与TCP相比,它的收发机制要简单很多,发送方只管将数据包发送出去,并不验证接收方是否接收到,收发双方也不需要建立连接。优点是发送速度较快,在点对点传输的实际应用中有较大的灵活性,但缺点是长距离传输或网络较差时很容易丢失数据包,数据的完整性较差。UDP协议因其传输机制的简单、便捷,使其在点对点传输领域有较大应用,但其缺点不容忽视,尤其在传输大文件时,很容易丢失数据包,我们并不希望接收方接收到的文件残缺不全,所以,使用UDP协议传输文件时,维护其数据的完整性非常必要。

2实现方法

首先,需要对发送的大数据进行分组、排序,将分好组的数据逐一发送,接收方在接收到所期望的数据包时,应向发送方发送确认信息,提示对方发送下一组数据包,因UDP是不可靠协议,发送方发送的数据包或接收方回复的确认信息都有可能在实际传输过程中丢失,所以发送方还需要有超时重发机制,在一段时间内未接收到对方回应信息,表明对方可能未接收到这组数据包,或是对方回复的确认信息未能收到。此时,需要将该组信息重新发送,直到接收方接收到为止,接收方也需要加入验证机制。如果接收到的数据包是已经接收过的,那么需要再次向发送方发送确认信息,告知对方发送下一组信息。当接收方接收的文件大小与发送方发送的文件大小一致时,接收方向发送方发送文件接收完毕确认信息,表明文件接收完毕。

3具体实现细节

本文实现的具体方式是采用C++编程语言。

3.1数据预处理

(1)在传输之前,需要将所传输的大文件进行分组、排序。首先将每组大小定义为1KB:#define MAX_BUFFERLEN 1024,接着为数据包定义数据结构,格式如下:

struct sendbuf

{

baohead head;

char buf[MAX_BUFFERLEN];

int buf Size;

};

(2)将每次发送的数据包定义为三段:包头、数据段、数据段长度变量,具体如下:

①包头(baohead):

struct baohead

{

int size;//记录文件总大小;

int id;//记录数据包序号;

int recvsize;//记录接收方收到的文件大小;

};

②数据段:char buf[MAX_BUFFERLEN];

③数据段长度变量:int buf Size。

(3)定义全局变量:

int sendexit=0;//控制发送线程状态的全局变量

int recvexit=0;//控制接收线程状态的全局变量

int filesize=0;//记录文件大小的全局变量

int recvsize=0;//返回已接收文件大小的全局变量

int Sendid=0;//发送id

int Receive Id =0;//接收id

3.2数据传输实现

网络应用中的主机A和主机B,主机A给主机B发送大小约为300M视频文件:

(1)首先,主机A创建两个线程:sendfunc(LPVOIDlp Param)、recvfunc(LPVOID lp Param),sendfunc负责发送和重传数据包,recvfunc负责接收另一端发送的确认信息。

sendfunc具体步骤如下:

①定义文件类指针,并打开要发送的文件

FILE *fp1;fp1 = fopen("D:\视频.mp4","rb");

②获取文件大小

fseek(fp1,0,SEEK_END);filesize=ftell(fp1);

③初始化全局变量sendexit=1,进入循环,直到接收到对方发送的 文件接收 完毕确认 信息后 , 将全局变 量改写sendexit=2,否则将持续发送;

④判断如果Receive Id == Sendid,则发送下一组数据包,全局变量Sendid、Receive Id被初始化为0,用来记录发送数据包的id号和对方接收数据包的id号,每次发送新数据包时,id都会递增1并会写入包头,对方如果成功接收,会反馈一个相同id号的确认信息,如果Receive Id == Sendid,表明对方已成功接收,Sendid加1;

⑤将文件下 组信息读 入数据包 中 : int readsize=fread(data.buf,sizeof(char),MAX_BUFFERLEN,fp1);并将文件大小、本次发送数据包id、本次发送数据段大小等信息写入包头:data.head.size=filesize;data.head.id=Sendid;data.buf Size= readsize;

⑥发送数据包:int d=sendto(sock,(char*)(&data),sizeof(data),0,(sockaddr *)&server,len);

⑦等待事件被激活:DWORD d Ret=Wait For Single Object(h Event,500);如果500毫秒后,没有收到任何回复信息,则重新发送这一组数据包,否则进入下一循环。

Recvfunc具体步骤如下:

①初始化recvexit=1;并进入循环,当接收到对方发送的文件接收完毕确认信息后,将recvexit改写为2,否则持续接收信息:recvfrom(sock,(char *)(&recvbao),sizeof(recvbao),0,(sockaddr *)&server,&len);

②当收到确 认信息后 , 将全局变 量改写 :recvsize=recvbao.recvsize;Receive Id = recvbao.id;并激活事件:Set Event(h Event);

③如果recvbao.recvsize==-1,则表明对方已接收完毕,改写全局变量:sendexit=2;recvexit=2。

(2)主机B作为接收方,只需创建一个接收线程即可,在程序开始,定义数据包结构及全局变量(同上),创建接收线程:HANDLEhandle=Create Thread(NULL,0,recvfunc,0,0,&ID);

recvfunc具体如下:

①创建文件指针并打开空文件:FILE *fp;fp=fopen("D:\视频.mp4","ab");

②初始化全局变量recvexit=1,并进入循环,当接收到的文件与对方发送的文件大小一致时,改写recvexit=2,并退出循环,否则持续 接收中 : recvfrom ( sock,(char *)(&data ) ,sizeof(data),0,(sockaddr *)&server,&len);

③判断data.head.id == id,表明接收到新数据,id加1,并将新数据 写入到文 件中 : fwrite ( data.buf , sizeof(char),data.buf Size,fp)

改写全局变量:

:recvsize=recvsize+data.buf Size;filesize=data.head.size;datahead.id=data.head.id;datahead.recvsize=recvsize;datahead.size=filesize;

发送确认信息:sendto(sock,(char*)(&datahead),sizeof(datahead),0,(sockaddr *)&server,len);

④判断data.head.id < id,表明是已经接收过的数据包,记录数据包 信息 : datahead.id = data.head.id ;datahead.recvsize=recvsize;datahead.size=filesize;并再次发送确认信息:sendto(sock,(char*)(&datahead),sizeof(datahead),0,(sockaddr *)&server,len);

⑤判断filesize == recvsize,表明文件已接收完毕,改写全局变量 : datahead.id = data.head.id ; datahead.recvsize=-1 ;datahead.size=filesize ; 并发送文 件接收完 毕确认信 息 :

sendto(sock,(char*)(&datahead),sizeof(datahead),0,(sockaddr*)&server,len);

改写:sendexit=2;recvexit=2;退出接收线程。

以上便是实现UDP大数据文件可靠传输的关键部分,它为点对点网络应用大数据的传输提供了可靠保障,在网络终端设备日益丰富的今天,为跨区域数据传输提供了便捷。

4结束语

UDP是一种高效的传输协议,较TCP而言,其在点对点网络应用领域具有较大的灵活性,使用UDP协议,无疑是一种好的选择,本文探讨了UDP的可靠传输,使UDP在网络终端设备层出不穷的今天,有了更广泛的使用。

参考文献

[1]谢希仁.计算机网络(第5版)[M].北京:电子工业出版社.2008.

[2]孙鑫,余安萍等.VC++深入详解[M].北京:电子工业出版社.2006.

[3]王艳芳,戴永,刘东华.基于UDP的数据可靠传输技术研究与应用[J].计算机工程与应用.2010.

[4]张恺.基于UDP的可靠文件传输协议的设计与实现[D].西安电子科技大学硕士学位论文.2014.

UDP传输 篇2

关键词:UDP,即时通信,断点续传

随着网络带宽延时产品(BDP)的增加,通常的TCP协议开始变得低效。这是因为它的加性增,乘性减算法-AIMD算法彻底减少了TCP拥塞窗口,不能快速地恢复可用带宽。理论上的流量分析表明TCP在BDP增加到很高的时候比较容易发生包损失。

在少量的BDP网络中使用面临TCP来实现相对平等的共享带宽,但在拥有大量BDP的网络中,基于TCP的程序就面临严重的拥塞问题。例如:Internet上的网格计算。

至今,对标准的TCP应用改进,一直都不能在较多BDP环境中使效率和公平性达到满意的程度(特别是基于RTT的问题)。例如:TCP的修改,RFC1423(高性能扩展),RFC2018(SACK)、RFC2582(New Reno)、RFC2883(D-SACK)、和RFC2988(RTO计算)都或多或少地提高了些效率,但最根本的AIMD算法没有解决。HS TCP(RFC 3649)通过根本上改变TCP拥塞控制算法在高BDP网络中获得高带宽利用率,但公平性问题仍然存在。

考虑到上面的背景,需要一种在高BDP网络支持高性能数据传输的解决方法。本方案推荐基于UDP协议上的传递信息超过64KB大小后,如何控制信息的安全性、连续性。

例如,客户端与服务器之间传输文件,客户端请求服务器文件传输,通过计算,按照UDP缓冲区大小(本例取值为4095字节),分包传输,并支持断点续传。虽然案例简单,但具有普遍性,并有应用价值。

1 步骤

(1)客户端发出请求,提取服务器端文件。

(2)服务器检查文件是否存在。读入文件,并计算文件大小,分包。

(3)使用Socket向客户端发出信息文件大小、名称信息。

(4)服务器按包大小读入文件内容。

(5)按照包大小进行传输。

2 开发过程

2.1 创建共享结构体变量

在进行数据传输之前必需先创建一个共享变量,并以它为基础进行数据传输中的操作。

同时为客户端和服务器端建立计算数据块函数,目的是标记信息量大小,按照UDP一次传输大小,分批传输。

2.2 客户端发出请求

2.3 服务器文件读入,向客户端发出文件信息

2.4 客户端取得信息

2.5 服务器文件传输

2.6 客户端取得文件包内容

2.7 心跳控制

如果信息接收发生阻塞,可在程序中加入心跳程序保证数据传输的正确性、完整性,可有效保障数据包在有效时间内到达目的地。

此外应加入有效的加密算法(如RSA),来保证数据的安全性。

3 适用情况

(1)网络BDP非常大,TCP不能借此公平共享带宽。这种情况下,UDP将占用TCP不能利用的带宽。

(2)在使用FIFO队列作为网络路径的网络中,如果队列大小大于BDP,TCP的共享带宽随着队列大小的增加而降低。然而,抵达UDP的共享带宽的队列大小通常超过实际路由器/交换机提供的数量。

(3)在使用UDP的过程中,应当考虑UDP网络协议(不友好协议)的友好性和公平性,不能一味地、不加限制地使用UDP。因此在加入心跳程序控制时,应当适度。

4 安全性

本方案依赖于应用程序提供的授权和底层提供的安全机制。然而,由于UDP是无连接的,方案的完整实现依赖于检查所有达到的包是否是预期的来源。这是从Socket的API连接概念中继承而来,其连接只是接收指定来源的数据。

在即时通信应用中扩展:由于服务器承载能力有限,而客户端请求较多的情况下,应考虑线程控制,建立线程池,使得程序具有强大而安全的多线程处理能力。目前考虑到应用范围应在多层分布式系统中,建立中间层来控制负载,并建立安全、高效的运行机制,以完成即时通信的要求。

参考文献

[1][美]David J.Kruglinski,潘爱民,王国印.Visual C++技术内幕.第4版.北京:清华大学出版社,1999:956-971.

[2]ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStu-dio.v80.chs/dv-fxnetwork/html/df29b4b0-49e8-4923-82b9-13150dfc40f5.htm.

[3]飞思科技产品研究中心.Delphi7组件及分布式应用开发.北京:电子工业出版社,2003.

UDP传输 篇3

1.1 TCP协议的分析

TCP网络传输控制协议, 提供的是面向连接、可靠的字节流服务。通信双方必须先建立TCP连接后, 才能进行彼此的可靠通信。TCP连接为每一方的接收缓冲区设置滑动窗口, 接收端只允许发送缓冲区能容纳的数据, 在滑动窗口的基础上进行流量控制, 以防止缓冲区溢出的现象发生。接收端在接收时进行TCP数据校验, 如果接收的数据报校验有差错, 将丢弃这个分片, 接收端将不确认接收, 致使超时重发来确保数据传输的准确性和可靠性。

1.2 UDP协议的分析

UDP协议即用户数据报协议, 主要作用是将网络数据流量压缩成数据包的形式在网络中进行传输。数据包的前8个字节包含报头信息, 剩余字节包含实际传输的数据。UDP协议是一个面向无连接的传输层协议, 提供不可靠的数据传输服务。

UDP报头携带的信息比TCP少的多, 如下表1所示。在数据传输过程中, 网络数据包是层层累加的结果。去掉数据报头部分, 才是数据, 但是, 在网络传输过程中, IP数据包最多可携带65536字节, 因为UDP协议不需要可靠传输, 相对TCP协议的报头来说, 省略掉了报头的很多信息, 从而换取了更多的数据空间。因此, 对于IP数据包来说, UDP连接时能够携带的数据比TCP多。如果需要在UDP连接上做可靠传输, 只能通过应用层来实现确认机制。

2 网络传输协议关键技术分析

2.1 TCP网络协议工作原理分析

TCP连接是一个全双工的数据通道, 在通信开始之前, 客户端通过向服务器端发送一个SYN来建立主动打开的连接, 作为“三次握手”的第一部分。如果是合法的SYN, 服务器端会向客户端回送一个SYN/ACK。最后, 客户端再发送一个ACK, 这样就完成了“三次握手”, 进入到了连接建立状态。“三次握手”协议可以确保通信双方都做好通信准备, 确保了数据传输的可靠性。当通信的一方将所有数据发送完成后, 使用FIN向对方发送关闭连接请求。虽然不再发送数据, 但是仍然可以接收该连接上的数据。只有当对方也发送关闭连接请求后, 该连接才会关闭。数据传输中的“三次握手”协议确保了数据传输的可靠性。

2.2 UDP网络协议工作原理分析

UDP在传输数据时没有事先建立连接, 没有流的概念, 不提供流量控制, 且没有超时重传机制, 因此UDP的传输速度相对较快。UDP与TCP一样能够进行数据校验, 当校验出现差错的时候, 抛弃数据, 不做处理。UDP只管发送消息, 不管消息是否到达, 出错的话交由上一层进行处理。对于视频、语音这些时效性比可靠性重要的传输来说, UDP协议显然更加合适, 因为即使在传输过程中即便丢失几个数据包, 不会对接收结果产生多大影响。

3 笔者对TCP/UDP协议差异性分析

基于前述分析可知, 可得TCP是面向连接的传输控制协议, 而UDP提供了无连接的数据报服务;TCP具有高可靠性, 确保传输数据的正确性, 不出现丢失或乱序;UDP在传输数据前不建立连接, 不对数据报进行检查与修改, 无须等待对方的应答, 所以会出现分组丢失、重复、乱序, 应用程序需要负责传输可靠性方面的所有工作;UDP具有较好的实时性, 工作效率较TCP协议高;UDP段结构比TCP的段结构简单, 因此网络开销也小。TCP协议可以保证接收端毫无差错地接收到发送端发出的字节流, 为应用程序提供可靠的通信服务。对可靠性要求高的通信系统往往使用TCP传输数据。比如HTTP运用TCP进行数据的传输。

UDP适用于对可靠性要求不高的通信系统, 优点是传输速度快。比如, 通过“ping”命令检测主机之间是否通信正常, ping命令的原理是向目的主机发送UDP数据包, 如果数据包是否到达的消息能够及时返回来, 证明网络是通的, 由此证明了UDP协议是面向无连接的网络协议。比如QQ运用UDP协议进行传输, 虽然可靠性不如TCP, 但其优点是通信效率高, 占用资源少。从上述分析可知笔者得到如表2所示的TCP和UDP的差异。

4 笔者对ÁTCP和UDP在工程中的应用分析

基于笔者的经验我们常见的中国移动、中国联通的GPRS、CDMA网络进行数据传输, 通过的是TCP/IP协议进行数据封包, 可灵活地实现多种设备接入, 工程安装简单, 在工业现场数据传输的应用中, 能很好的解决偏远无网络无电话线路地区的数据传输的难题。尽管GPRS和CDMA的应用越来越广泛, 但是关于传输中使用TCP/IP协议还是UDP协议, 却依然争论很多, GPRS网络端口资源, UDP十分紧缺, 变化很快;而TCP采用可靠链路传输, 不存在端口变化的问题适合工业场合的应用。

TCP本身就是可靠链路传输, 提供一个时时的双向的传输通道, 能很好的满足工业现场传输的要求。然而GPRS网络对TCP链路也存在一个限制:此条链路在长时间 (大概20分钟左右, 视具体情况而定) 没有数据流量, 会自动降低此链路的优先级直至强制断开此链路。所以在实际使用中也会采用心跳包 (一般是一个字节的数据) 来维持此链路。

UDP由于自身特点, 以及GPRS网络UDP端口资源的有限性, 在一段时间没有数据流量后, 端口容易改变, 产生的影响就是从服务器中心端向GPRS终端发送数据, GPRS终端接收不到。具体的原因就是移动网关从中作了中转, 需要隔一定时间给主机发UDP包来维持这个IP和端口号, 这样主机就能主动给GPRS发UDP包了并且在测试中发现, 这个间隔时间很短, 在1多分钟发一次UDP包才能够维持, 但是再长可能移动网关那边就要丢失这个端口了, 此时如果主机想主动发数据给GPRS, 那肯定是不行的了, 只有GPRS终端设备再发一个UDP包过去, 移动重新给你分配一个中转IP和端口, 才能够进行双向通讯。

UDP数据包没有TCP包的可靠性和控制机制, 当传输速度比数据完整性更重要时, UDP显然是最好选择。如果发生网络拥塞, UDP的低开销可以更好更快的将数据传送到目的端, 而TCP丰富的功能反而会造成传输的性能低下。为了获得更好的使用效果, 比如各种音频、视频的应用, 往往可以牺牲一定的可靠性来提高传输的性能, 我们平时聊天用的QQ就是最好的例子。UDP也可以应用于局域网内部的数据传输, 因为数据比较多, 局域网内部丢包率很低。

5 结语

随着网络通信的快速发展, 通信双方的传输速度和通信的可靠性是必不可少的, 由于受到网络传输中IP数据包大小的限制, 传输速度和可靠性通常来说是矛盾的。TCP传输更加可靠, UDP传输速度更快, 对于不同的应用采取不同的网络传输协议。

摘要:在TCP/IP网络体系结构中, TCP、UDP网络传输协议作为传输层的重要协议, 为上层用户提供通信服务。TCP提供的是面向连接的通信服务, UDP提供的是面向无连接的通信服务。本文对TCP协议和UDP协议的特点、工作原理、差异性及在工程中的应用进行了深入的分析。

关键词:TCP,UDP,网络传输协议,面向连接,面向无连接

参考文献

[1]赵飞, 叶震.UDP协议与TCP协议的对比分析与可靠性改进[J].计算机科学与发展, 2006 (16) .[1]赵飞, 叶震.UDP协议与TCP协议的对比分析与可靠性改进[J].计算机科学与发展, 2006 (16) .

[2]张艺濒, 张志斌, 赵咏.TCP与UDP网络流量对比分析研究[J].计算机应用研究, 2010 (6) .[2]张艺濒, 张志斌, 赵咏.TCP与UDP网络流量对比分析研究[J].计算机应用研究, 2010 (6) .

UDP传输 篇4

关键词:TCP/IP网络,通讯,客户机/服务器,传输

0 引言

随着互联网的发展越来越多的基于互联网的软件应运而生。在现代的网络通信中,有许多的软件都是基于这一原理的即时通讯系统,例如ICQ,OICQ以及MSN。它们的出现为网上的即时交际提供了很好的平台。本文以ICQ为例来对系统进行分析。

随着信息化的普及,一个以因特网为基础,以电子信息为载体的社会已经形成,现在急需要电子邮件的系统,节约管理成本,提高效率,减轻办公人员的工作负担。现在所要实现的程序是一个用JAVA语言实现的即时通讯系统,他一方面保留着即时通讯系统的一般功能,还要有一些符合人们实际情况的设计,如在对方没有在线的情况下,会将所要发送的信息通过STMT以邮件和形式直接发送到对方的邮箱里,以方便更好地使用这个系统实现网上的交流。

1 客户机/服务器模型的设计原理和过程

客户机/服务器模型也是一种网络模型,它并不是定义了网络的层次结构,而是描述了一种网络程序运行的方式。

客户机/服务器模型将网络应用程序分为客户和服务器两部分。客户方对服务器方发送信息请求,服务器方对其做出相应回答,提供服务。在TCP/IP网络应用中,多数网络应用程序是使用客户/服务器模型设计的。服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户程序提出了请求信息。此时,服务程序被“惊醒”并且为客户提供服务,对客户的请求做出适当的反应。虽然基于连接的服务是设计客户/服务器应用程序的标准,但有些服务也是可以通过数据报Socket提供的。

当建立服务器程序时,应该将服务器程序设计成等候客户的请求。TCP传输层通过协议端口和应用程序(像服务器和客户)通信,也就是说,为了接收客户请求,服务器程序必须对传输层的一个特定协议端口进行侦听。当服务器配置Socket接口时,它使用bind()函数让Socket执行体登记一个协议端口。Socket执行体立即告诉传输层某个特定协议端口已被使用,并将其收到的所有数据传送给Socket API。

使用无连接协议的程序(无连接协议的套接字调用时序图如图1所示)和使用面向连接协议的服务器程序(面向连接协议的套接字系统调用时序图如图2所示)之间的主要相似之处是它们都必须对一个协议端口进行侦听。Socket API中的bind()函数让程序将一个本地地址(包括主机地址和协议端口)和一个Socket联系起来。下面程序行显示了一个典型的函数调用:

result=bind (sockethandle,localstructure,socketaddress,addresslength)

与服务器程序一样,无连接客户程序也使用bind函数让Socket执行体登记协议端口。也就是说,类似服务器程序,无连接客户程序告诉Socket执行体使用哪个协议端口进行数据传输。Socket执行体处理传输层内UDP软件模块和客户程序之间的接口。

即时通讯系统在客户端和服务器之间主要传送的是文字信息,服务器端只需要把最新的文字信息推送到客户端,这样减少了网络传输内容,节省了网络传输的时间,无疑提高了聊天速度。这种“推”技术是目前基于Socket聊天系统的主要实现技术。

2 系统模式及功能模块划分

结合现有的即时通讯系统以及项目的要求,所以该系统采取C/S模式:其中客户端与服务器之间以Socket(TCP)的方式进行通信;客户之间以UDP的方式进行即时通信;当用户不在线时以SMTP邮件的形式进行通信。其中的客户使用图形接口,是用户和应用程序的用户接口;服务器封装了所有对数据库和客户端的数据交换和操作。功能模块的划分如图3所示。

3 软件设计概述

3.1 数据库的设计

系统可以采用任何一种流行的,Java支持的数据库,本系统采用了Microsoft公司的SQL Server 2000作为后台数据库。通过对现在流行的一些即时通讯系统的参考,建立数据库,名为javaicq,数据库共建立两个表,表1是用户的基本信息,包括呢称、号码等。表2是用户的好友表,包括用户自己的号码和好友的号码。

3.2 服务器设计

(1) 程序描述

首先服务器通过建立一个ServerSocket连接,不断侦听是否有客户端连接或者断开连接。数据库数据操作包括录入用户信息、修改用户信息、查找好友数据库资料以及添加好友数据到数据库等。服务器端是一个信息发送中心,所有客户端的信息都传到服务器端,再由服务器根据要求分发出去。服务器与客户间通过套接口Socket(TCP)连接。在JAVA中使用套接口相当简单,Java API为处理套接口的通信提供了一个类java.net.Socket,使得编写网络应用程序相对容易。服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8000,然后无限循环调用accept()方法接受客户程序的连接。

(2) 功能

服务器端主要完成三个功能:建立连接、操作数据库和监听客户。

3.3 客户端设计

(1) 程序描述

客户端与服务器端建立通信通道,向服务器端发送新建用户的信息,接收来自服务器的信息进行注册、完成用户登陆,此外,用户通过客户端可以查看自己和好友的信息。客户端可以完成信息的编辑、发送和接收等功能。客户通过Socket(InetAddress,port)建立与服务器的连接。服务器与客户都通过构造BufferedReader,PrintWriter来建立输入输出流,然后双方通过该输入输出流相互传递信息,一旦收到客户方的连接请求,服务器accept()方法返回一个新建的Socket对象。客户端然后向服务器发送消息,比如注册,登录,查找好友等,服务器收到来自客户的请求后,针对不同的消息处理请求, 虽然UDP不可靠但是对于ICQ可靠性并不太重要,而且UDP快速,所以客户间发送信息通过UDP。用户登录时通过类DatagramPacket和DatagramSocket创建UDP包括其本地接受端口以及发送端口,默认端口为5000和5001,通过取得的好友的IP地址来向好友发送消息(send(DatagramPacket)和接受消息(receive(DatagramPacket))。当用户通过UDP收到消息后,可以通过DatagramPacket的方法InetAddress getAddress()得到对方的IP地址,通过对好友列表比较以判断是谁并提示用户收到某某的消息,然后用户选择该用户查看消息,如果好友列表没有该人就显示收到陌生人的消息。用户可以按陌生人按钮查看消息。当服务器收到用户的注册请求,便开始接受客户传递的信息,诸如客户的呢称,性别,籍贯,头像,个人资料等,接受完毕后,便通过JdbcOdbc与后台数据库连接,然后向数据库添加记录,如果成功,便向客户返回其JICQ号码,并在数据库中注册用户的IP地址,然后更新其Status为1即用户在线。客户收到服务器返回的信息后,便打开主程序窗口,并同时开始创建UDP以便在用户之间建立联系。

(2) 功能

客户端完成4个功能:新建用户、用户登陆、查找好友和聊天通信。

4 结束语

本系统是一个用JAVA语言实现的即时通讯系统,他一方面保留着即时通讯系统的一般功能,还要有一些符合实际情况的设计:如在对方没有在线的情况下,会将所要发送的信息通过STMT以邮件形式直接发送到对方的邮箱里,以方便人们更好地使用这个系统实现网上的交流。

参考文献

[1]官章全,等.VC60高级编程范例[M].电子工业出版社,2001.

[2]张海藩.软件工程导论[M].清华大学出版社,1998.

[3]谢希仁.计算机网络[M].电子工业出版社,1999.

[4]王国印.Visual C++TM技术内幕[M].2版.清华大学出版社,1996.

[5]汪成为,等.面向对象分析、设计及应用[M].国防工业出版社,1992.

[6]VC++6.0数据库开发实例[M].同志工作室出版社/人民邮电出版社,2001.

【UDP传输】推荐阅读:

大气传输07-15

传输特点05-14

传输材料05-19

传输问题05-25

混合传输05-28

传输监测06-01

语音传输06-06

传输带宽06-10

宽带传输06-11

传输存储06-25

上一篇:小学生榜样教育研究下一篇:车辆噪声控制方法分析