基于Socket的网络即时通信系统报告_第1页
基于Socket的网络即时通信系统报告_第2页
基于Socket的网络即时通信系统报告_第3页
基于Socket的网络即时通信系统报告_第4页
基于Socket的网络即时通信系统报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.1网络信息处理课程设计报告题目:基于Socket的网络即时通信系统班级:小组成员:指导教师:中国矿业大学计算机学院2021年 6 月目录 TOC o 1-3 h z u HYPERLINK l _Toc3600886271.需求分析 PAGEREF _Toc360088627 h 2HYPERLINK l _Toc3600886281.1开发背景 PAGEREF _Toc360088628 h 2HYPERLINK l _Toc3600886291.2系统目标 PAGEREF _Toc360088629 h 2HYPERLINK l _Toc3600886301.3主要思路和操作流程 PAG

2、EREF _Toc360088630 h 2HYPERLINK l _Toc3600886311.4相关技术 PAGEREF _Toc360088631 h 2HYPERLINK l _Toc3600886321.4.1 JAVA语言 PAGEREF _Toc360088632 h 2HYPERLINK l _Toc3600886331.4.2 TCP/IP协议 PAGEREF _Toc360088633 h 2HYPERLINK l _Toc3600886341.4.3 Socket通信 PAGEREF _Toc360088634 h 2HYPERLINK l _Toc3600886351.

3、5开发工具与开发平台 PAGEREF _Toc360088635 h 2HYPERLINK l _Toc3600886362.概要设计 PAGEREF _Toc360088636 h 2HYPERLINK l _Toc3600886372.1系统功能描述 PAGEREF _Toc360088637 h 2HYPERLINK l _Toc3600886382.2系统架构 PAGEREF _Toc360088638 h 2HYPERLINK l _Toc3600886392.3模块划分 PAGEREF _Toc360088639 h 2HYPERLINK l _Toc360088640客户端模块

4、PAGEREF _Toc360088640 h 2HYPERLINK l _Toc360088641效劳器端模 PAGEREF _Toc360088641 h 2HYPERLINK l _Toc3600886423.详细设计 PAGEREF _Toc360088642 h 2HYPERLINK l _Toc3600886433.1流程图 PAGEREF _Toc360088643 h 2HYPERLINK l _Toc360088644系统总体流程图 PAGEREF _Toc360088644 h 2HYPERLINK l _Toc360088645客户端流程图 PAGEREF _Toc360

5、088645 h 2HYPERLINK l _Toc3600886463.2数据构造 PAGEREF _Toc360088646 h 2HYPERLINK l _Toc360088647效劳器端设计 PAGEREF _Toc360088647 h 2HYPERLINK l _Toc360088648客户端设计 PAGEREF _Toc360088648 h 2HYPERLINK l _Toc3600886493.3协议构造 PAGEREF _Toc360088649 h 2HYPERLINK l _Toc360088650消息传送协议 PAGEREF _Toc360088650 h 2HYPE

6、RLINK l _Toc360088651文件传送协议 PAGEREF _Toc360088651 h 2HYPERLINK l _Toc3600886524.软件测试与代码分析 PAGEREF _Toc360088652 h 2HYPERLINK l _Toc3600886534.1效劳器 PAGEREF _Toc360088653 h 2HYPERLINK l _Toc360088654效劳器端启动界面 PAGEREF _Toc360088654 h 2HYPERLINK l _Toc360088655效劳器端停顿界面 PAGEREF _Toc360088655 h 2HYPERLINK

7、l _Toc360088656效劳器端发送系统消息 PAGEREF _Toc360088656 h 2HYPERLINK l _Toc3600886574.2客户端 PAGEREF _Toc360088657 h 2HYPERLINK l _Toc360088658客户端连接设置界面 PAGEREF _Toc360088658 h 2HYPERLINK l _Toc360088659客户端用户设置界面 PAGEREF _Toc360088659 h 2HYPERLINK l _Toc360088660客户端群聊界面 PAGEREF _Toc360088660 h 2HYPERLINK l _T

8、oc360088661客户端私聊界面 PAGEREF _Toc360088661 h 2HYPERLINK l _Toc360088662发送文件界面 PAGEREF _Toc360088662 h 2HYPERLINK l _Toc3600886635.设计感想与总结 PAGEREF _Toc360088663 h 21.需求分析1.1开发背景即时通信系统是基于Internet网络及其它有线、无线网络的一种非常流行的实时通信方式,是一种非常便捷的网络通讯技术,它用互联网通过通信系统建立起网络虚拟环境,通过计算机键盘或无线设备在网络上进展实时交换,成为一种提供公共通讯、商务通讯及商务合作的新媒

9、介,也弥补了传统通讯形式的缺乏,尤其是电子及语音通信方面。随着即时通信普及,全球即时通信用户的数量也不断增长。微软公司的MSN、腾迅公司QQ、网易公司的网易泡泡等通信系统都是家喻户晓的。除了最根本的单纯的文本交流,即时通信业务增加了视频、音频交流等多种宽带应用元素,如提供视频、语音通信效劳、交流共享、短信收发、数据传输等效劳工程。即时通信业务的承载设备也将趋向于多元化。用户可以通过手机、个人计算机、PDA等工具使用即时通信,宽带、网络业务也逐渐在即时通信的软件上实现功能。本文所介绍的网络即时通信系统是基于开放的JAVA应用程序开发设计的,其主要特性是能动态、实时的完成信息的传递,且具有高效的交

10、互性。该设计有一个效劳器和假设干个客户端,效劳器、客户端和客户端、客户端之间可以实现群聊与私聊,客户端之间可以进展文件传输。该设计可以应用于公司或者学校,因为是自己提供效劳器,方便管理各个用户。1.2系统目标该系统目标是提供信息交互等根底效劳,它既可以用TCP可靠的运输效劳,也可以使用UDP运输效劳。这个即时通信系统是一个类似QQ的聊天系统,有客户端和效劳器端。效劳器端记录当前在线客户列表,把客户列表发送给每一个在线客户,并实时刷新。任一个客户可以和任意其它的客户进展交互,即从在线客户列表中选择一个或一组其它客户通过效劳器转发彼此进展交互,包括信息交互,文件交互。本系统是基于Socket进展通

11、信,要求有两台或两台以上的能正常进展网络通信的计算机,并且已经接入了同一个网络,每一台电脑都有一个固定且在网络中唯一的IP地址。1.3主要思路和操作流程1设计效劳器端和客户端的界面效劳器的界面设置启动效劳器和关闭效劳器的按钮,用户列表框来显示当前已登录的用户,用来发送系统消息的文本框,用来发送系统消息的按钮,和一个文本框来显示各种信息,比方显示系统信息,以及用户登录信息,效劳器开启或关闭的信息。客户端界面设置一个菜单栏,菜单栏里有操作,设置,和发送文件三个主菜单。操作主菜单应该包括登录、注销和退出三个子菜单;设置包括用户名用来设置用户名,连接两个子菜单用来与效劳器进展连接;发送文件主菜单有一个

12、发送文件的子菜单用来发送文件;客户端还用来设置用户名,与效劳器建立连接,登录效劳器,注销,文件接收和发送消息六个按钮,还设置一个下拉列表框来显示所有已经登录的用户名及其IP这里设置IP的目的是为了实现文件的传输,一个用来显示用户头像的标签所有用户的头像设置为同一图片,一个用来发送消息的文本框,一个用来接收信息的文本框。2设计消息传送的协议对消息的传送,分为效劳器端和客户端两局部:效劳器端,发的消息为系统消息,客户端发送的消息根据消息接收对象的个数的不同又分为私聊信息和群聊信息。3设计文件传送的协议首先,发送端从效劳器获得承受端的IP,接着发送端和客户端建立连接,传送文件。1.4相关技术1.4.

13、1 JAVA语言Java是一种简单、多线程、平安、容易适用、可移置、面向对象、高性能的语言。它具有如下特点:1.面向对象:面向对象技术是一次革新,它可以提高模块化程度和重复适用率,缩短软件开发时间,减低开发本钱。2.平安性:Java提供了许多平安机制,是能用在网路和分布环境下的程序设计语言。3.多线程:Java具备建的多线程功能,使各线程并发、独立执行,提高系统的运行效率。4.平台独立:平台独立是指程序不受操作平台限制,可以应用于各种平台。Java源程序经过编译后能够生成字节码文件,字节码和具体的计算机无关。计算机安装能解释执行字节码的JVM,就能执行字节码文件,实现了Java的平台独立性。5

14、.执行效率:字节码要经过JVM解释成机器码才能执行,所以速度较慢。1.4.2 TCP/IP协议TCP协议是网络通信的基石。Java专门提供了Socket的类库,抽象出TCP协议通信中的常用方法:TCP协议与三次握手:1客户端,首先发送TCP请求,客户端是效劳如数据查询效劳的请求者。2效劳器,接收到客户端的请求后,效劳器向客户端提供效劳。效劳器是效劳的执行者,返回效劳执行的结果给向客户端。ACK=1第一次握手,主机A向主机B发送连接请求第二次握手,主机B收到主机A的请求,向主机A回发一个确认,同时向主机A发送一个连接请求第三次握手,主机A收到主机B发送的数据包在向主机B发送一个确认连接主机A 主

15、机BSYN=1,SEQ=0ACK=1,SYN=1,SEQ=1aaaaaaaaaa图1-1握手协议首先客户端发送一个数据包SYN。如果效劳器收到SYN,它会发回一个数据包SYN+ACK。客户端为了表示收到SYN+ACK信息,向效劳器发送一个最终确认信息ACK。SYN,SYN+ACK,ACK步骤被称为“三次握手,这样,连接就建立好了,并将一直保持活动状态,直到其中一方发出FIN完毕信号或者超时。这种通信模式也被叫做客户端/效劳器C/S模式。1.4.3 Socket通信图1-2 Socket实现原理图从概念上理解,Socket是网络编程中最常见的客户/效劳器模式,也是本系统的根底。以该模式编程时,效

16、劳器端有一个进程或多个进程在指定的端口等待客户来连接,一旦连接成功,便按设计的数据交换方法和格式进展数据传输。客户端向效劳器端提出连接请求,连接之后进展通信。Socket是一种用于表达两台机器上都有一个Socket,可以想象一条虚拟的电缆工作在两台机器之间,电缆插在两台机器的Socket上。简单的说,一台计算机上的Socket同另一台计算机通话创立一个通信信道,我们可以用这个信道在两台机器之间发送数据。如图2-2 Socket实现原理图。1.5开发工具与开发平台本次开发是基于操作系统Microsoft Windows 7,开发工具为JDK,开发平台为eclipse。2.概要设计2.1系统功能描

17、述我们的程序功能分为两个局部,即发送消息局部和发送文件局部(1)发送消息:首先开启效劳器端,并且在效劳器端开启效劳,然后在客户端设置效劳器端的IP地址和自己的用户名,以便于与效劳器端的连接与用户的识别,然后登录效劳器并建立连接,在自己的客户端中的下拉列表框中选择选择要发送消息的对象或者是默认选择发送消息至所有人,最后点击发送。由于我们的聊天程序是基于效劳器端的消息转发机制,所以如果用户选择发消息给自己的时候,就会显示2条信息,第一条是自己的客户端输出到聊天的文本框中的,第二条是效劳器把消息转发给我自己的客户端然后输出到聊天的文本框中的。当然,我们在效劳器端也是可以发消息的,在客户端收到的消息都

18、会显示为系统消息加上你在效劳器端输入的消息。(2)发送文件:在与效劳器端建立连接的条件下,客户端从效劳器端获得所要发送文件的对象的IP地址,然后通过原有的发送消息的机制,把我要发送文件的消息发给效劳器进展转发,当另外一个客户端收到对方要发送文件的信息后也通过原有的发送消息的机制,把我接收文件的消息仍然交给效劳器进展转发,并且从效劳器端获得要发送文件的那个用户的IP地址。当双方都收到消息后,即可建立连接发送文件,在文件发送完毕,在这两个客户端都实时显示文件发送完毕的信息。2.2系统架构图1中的是我们在两个用户的情况下整个聊天程序的系统架构,并且这两个用户是有传输件的需求的。我们的聊天程序是多个用

19、户的连接,我们的聊天程序是基于消息的效劳器转发机制,即将所有要发送的消息都提交到效劳器,然后由效劳器转发,然后由效劳器进展识别是多人聊天的信息还是私人聊天的信息。如果是多人聊天,即转发到所有的用户,如果是私人聊天,转发到要发送的用户的客户端去。用户之间传输文件及进展点对点通信效劳器客户端1客户端2与效劳器传输信息与效劳器传输信息图1考虑到传输效率方面的问题,以及隐私方面的问题,我们的文件传输机制没有用基于效劳器转发机制实现,而是利用消息转发机制进展协议的控制,而后用一个新的端口号,建立双方的TCP连接直接传输文件。文件传输完毕后,双方都关闭各自的传输文件的socket。2.3模块划分客户端模块

20、信息封装+“*+“文件传输信息封装+“*或者“所有人我们的模块划分为效劳器端以及客户端的发送消息局部和客户端的发送文件局部。由于效劳器端只是负责建立多方之间的连接以及消息的转发,所以做成一个单独的模块,而客户端有发送文件或者是发送消息的需求,所以这两个分别做成客户端的两个线程,形成客户端模块(如图2)。图2 客户端模块效劳器端模图3为效劳端模块,效劳器对客户端进展解析信息,以及对各客户端传来的信息进展判断传递同时判断各客户端传来的信息是什么类型,需要传输消息或者是文件。解析带“所有人的信息解析带“文件发送的信息,并发送发送端IP和端口号效劳端发送私聊信息为发送文件发送IP和端口号播送群聊信息解

21、析“*接收端*的信息图3 效劳器端模块3.详细设计3.1流程图系统总体流程图客户端流程图3.2数据构造效劳器端设计1ChatServer.javaPublic类主要功能是效劳器端的界面设计,添加窗体中组件的事件侦听,响应相应事件处理。并调用Listener类来实现对客户端用户的上线与下线的监听,和实现效劳端对客户端的发送系统消息。主要功能函数:actinPerformed 主要对于窗体按键的响应,实现效劳器端的启动效劳,停顿效劳,和效劳端对在线用户的消息发送。startService 启动效劳器的工作stopService 停顿效劳器的工作sendStopToAll 对所有客户端发送效劳器停顿

22、工作的消息sendMsgToAll 对所有客户端发送效劳器的系统消息sendSystemMessage 对单个的客户端发送系统消息(2ServerListen.javaListener类主要功能是实现效劳器端对于客户端的用户的上下线进展监听。通过调用类(ServerReceive类来实现。当用户发生变化时会对效劳端的主界面进展相应的修改。主要功能函数:run 实现客户端的上线情况监听,并调用Receiver类来实现客户的更新和对于客户端到客户端的消息转发。(3) UserLinkList.javaUserLinkList类是用户列表,用用户链表节点实现,该类通过构造用户链表,定义了添加用户,删

23、除用户,换回用户数目,根据用户名查找用户。主要功能函数:addUser 对用户链表添加新用户delUser 删除链表中的用户getCount 返回链表中记录的用户数量findUser 通过用户名称查找用户。客户端设计1 ChatClient.javaChatClient类主要是实现客户端的界面,添加对于客户端界面的组件事件侦听与事件处理。调用ClientRecieve类实现消息的收发。主要功能函数:actionPerformed 响应窗体的组建事件,实现用户信息的配置,与效劳器端的连接和断开连接,客户端的信息发送,以及客户端对客户端的点对点的文件传送。Connect 实现用户端与效劳器的套接字

24、连接,并创立ClientRecieve实例来实现从效劳器端获得消息。DisConnect 关闭与效劳器端的连接。SendMessage 实现客户端的对在线用户的发送消息。2 ClientReceive.java ClientRecieve线程类主要是实现客户端对于效劳器端的消息接收。主要功能函数:run 线程体不断的监听端口消息信道,从中获得效劳器端只能够发送的各种消息。3 FileSend.javaFileSend线程类,实现文件的发送,当用户需要点对点的文件传送,调用此类。主要功能函数:selectfile在客户端选择要发送的文件Sendfile 当用户连接到时把文件从本地发送到承受端。R

25、un 线程体实现对于文件发送端口的监听,等待用户的连接。4 FileRecieve.javaUploadserver线程类,实现与文件发送端的套接字连接,然后调用FileRecieve类实将文件下载到本地。主要函数:run线程体,实现套接字连接FileRecieve线程类具体实现与文件发送端口的回话,将文件下载。主要函数:run线程体,实现文件下载。5 ConnectConf.javaConnectConf类实现用户连接信息的配置,设置连接效劳端的ip。UserConf.java UserConfUserConf 类,实现用户信息的修改,主要是用户名称修改Node.javaServerRece

26、ive.javaUserConf.java3.3协议构造消息传送协议1效劳端:效劳器端发的消息是系统消息,系统消息发给所有用户见图4;效劳器要发送系统消息,效劳器经判断后将其传给所有用户,或者构成对单个用户的系统信息。2客户端:发送端从保存有用户名的下拉列表框中选择接收消息的对象,如果选择发送给所有用户,则为群聊信息,效劳器发送给所有用户见图4;用户1要发送一条群聊信息,当效劳器收到这条消息后判断消息的类型,得知是去聊信息后就将它传给所有的用户。假设发送给特定的*一用户,效劳器在用户列表找到该用户然后转发消息见图5,用户1要跟用户2通信,发出一条1到2 的消息,当系统收到这条消息后首先判断它是

27、不是系统消息,如果是,则播送这条消息,如果不是,则判断它是不是群聊信息,如果是则播送这条消息,如果不是,则效劳器判断它为私聊信息,并从接收到的消息中提取出接收消息的客户名,并将它转发给这个用户。对于消息的传输,在效劳器端,先建立端口侦听,当客户端登录时,由于客户端知道效劳器端的IP及端口,可以很快找到效劳器,效劳器监听到客户端请求,于是两端建立连接。通过对信息的封装进展通信。假设是群聊,则在前面添加“所有人,然后信息传输到效劳器后,效劳器接收到客户端的信息,将信息进展验证、查找,发现前面封装的信息为“所有人,可以认定该信息为群聊信息。于是效劳器对信息进展播送,让每个客户端都收到信息。假设是私聊

28、,客户端从效劳器的列表中找到所需私聊的对象,然后在给信息添加*接收端的信息进展封装。当信息传送到效劳器时,效劳器解析,得到需要传输的对象,在将发送端的客户以及信息传送给接收端。图4图5文件传送协议发送端发送一条消息提示接收端我要发文件,并从效劳器获得接收端的IP地址,建立通信双方的TCP连接。如图6,用户1要向用户2发送文件,首先发送一条请求消息,从效劳器获得用户二的IP,等待确认消息;当用户2收到请求消息之后,向用户1发送确认消息,并从效劳器获得用户1的IP;当用户1收到确认消息后,与用户2建立连接,传送文件,用户1为文件发送的效劳端,用户2为文件发送的客户端。该操作属于面向连接的操作,应用

29、了TCP协议,建立了客户发送端1与客户接收端2的连接,然后传递文件。对于该连接来说,这里进展是先在发送端建立了一个效劳器,采用与信息传输以为另外一个端口号,启动线程监听。当接收端从效劳器接收到发送传来的消息,该消息包括发送端的IP以及发送端建立的效劳器的端口号以及“*接收端“发送文件的信息,当效劳器接收到时,解析该信息,从封装信息中取出“发送文件以消息形式传给接收端,同时将发送端的IP以及发送端的新建的端口号传给接收端,于是接收端利用效劳器转发而来的IP与端口号向发送端发出连接请求,当发送端接监听到接收端时连接建立。然后当接收端通过效劳器向发送端发送接收请求时,发送端即发送文件给接收端,完成文

30、件传输。由用户1向2传输文件图64.软件测试与代码分析4.1效劳器效劳器端启动界面/ 启动效劳端publicvoid startService()tryserverSocket = new ServerSocket(port,10);/messageShow.append(效劳端已经启动n);startServer.setEnabled(false);startItem.setEnabled(false);stopServer .setEnabled(true);stopItem .setEnabled(true);sysMessage.setEnabled(true);catch (E*ce

31、ption e)e.printStackTrace();userLinkList = new UserLinkList();listenThread = new ServerListen( serverSocket, bobo*, messageShow,showStatus,Userlist,userLinkList); /Serverlisten.java中将以上的操作进展刷新listenThread.start();效劳器端停顿界面/ 关闭效劳端publicvoid stopService()try/向所有人发送效劳器关闭的消息sendStopToAll();listenThread.i

32、sStop = true;serverSocket.close();int count = userLinkList.getCount();int i =0;while( i count)Node node = userLinkList.findUser(i);node.input .close();node.output.close();node.socket.close();i +;stopServer .setEnabled(false);stopItem .setEnabled(false);startServer.setEnabled(true);startItem.setEnabl

33、ed(true);sysMessage.setEnabled(false);messageShow.append(效劳端已经关闭n);bobo*.removeAllItems();bobo*.addItem(所有人);catch(E*ception e)e.printStackTrace();效劳器端发送系统消息/向客户端用户发送系统消息publicvoid sendSystemMessage()String toSomebody = bobo*.getSelectedItem().toString();String message = sysMessage.getTe*t() + n;mes

34、sageShow.append(message);/向所有人发送消息if(toSomebody.equalsIgnoreCase(所有人)sendMsgToAll(message);else/向*个用户发送消息Node node = userLinkList.findUser(toSomebody);trynode.output.writeObject(系统信息);node.output.flush();node.output.writeObject(message);node.output.flush();catch(E*ception e)sysMessage.setTe*t();/将发送

35、消息栏的消息清空4.2客户端客户端连接设置界面/保存按钮的事件处理save.addActionListener(new ActionListener() publicvoid actionPerformed (ActionEvent a) int savePort;String inputIP;/判断端口号是否合法tryuserInputIp=+InetAddress.getByName(inputIp.getTe*t();userInputIp = userInputIp.substring(1);catch(UnknownHostE*ception e)DLGINFO.setTe*t( 错

36、误的IP地址!);return;/判断端口号是否合法trysavePort = Integer.parseInt(inputPort.getTe*t();if(savePort65535)DLGINFO.setTe*t(侦听端口必须是0-65535之间的整数!);inputPort.setTe*t();return;userInputPort = savePort;dispose();catch(NumberFormatE*ception e)DLGINFO.setTe*t( 错误的端口号,端口号请填写整数!);inputPort.setTe*t();return;);/关闭对话框时的操作th

37、is.addWindowListener(new WindowAdapter()publicvoid windowClosing(WindowEvent e)DLGINFO.setTe*t(默认连接设置为 127.0.0.1:8888););/取消按钮的事件处理cancel.addActionListener(new ActionListener()publicvoid actionPerformed(ActionEvent e)DLGINFO.setTe*t( 默认连接设置为 127.0.0.1:8888);dispose(););客户端用户设置界面/保存按钮的事件处理save.addAct

38、ionListener(new ActionListener() publicvoid actionPerformed (ActionEvent a) if(userName.getTe*t().equals()DLGINFO.setTe*t(用户名不能为空!);userName.setTe*t(userInputName);return;elseif(userName.getTe*t().length() 15)DLGINFO.setTe*t(用户名长度不能大于15个字符!);userName.setTe*t(userInputName);return;userInputName = use

39、rName.getTe*t();dispose(););/关闭对话框时的操作this.addWindowListener(new WindowAdapter()publicvoid windowClosing(WindowEvent e)DLGINFO.setTe*t( ););/取消按钮的事件处理cancel.addActionListener(new ActionListener()publicvoid actionPerformed(ActionEvent e)DLGINFO.setTe*t( );dispose(););客户端群聊界面/向所有人发送消息publicvoid sendMs

40、gToAll(String msg) int count = userLinkList.getCount();/用户总数int i = 0;while(i count)Node node = userLinkList.findUser(i);if(node = null) i +;continue;trynode.output.writeObject(系统信息);node.output.flush();node.output.writeObject(msg);node.output.flush();catch (E*ception e)i+;sysMessage.setTe*t();客户端私聊

41、界面publicvoid SendMessage()String toSomebody = bobo*.getSelectedItem().toString(); String dd= new String( /);int cc=toSomebody.inde*Of(dd,0); System.out.println(toSomebody+ +cc);if(cc!=-1) toSomebody=toSomebody.substring(0,cc); String status = ;String action = ;String message = clientMessage.getTe*t(

42、);if(socket.isClosed()return ;tryoutput.writeObject(聊天信息);output.flush();output.writeObject(toSomebody);output.flush();output.writeObject(status);output.flush();output.writeObject(action);output.flush();output.writeObject(message);output.flush();catch (E*ception e)发送文件界面/发送文件publicvoid sendfile()if(

43、fileE*sit) byte ff;int size;PrintStream ps;String fileName;tryps=new PrintStream(clientsocket.getOutputStream();size=(int)myfile.length();fileName=myfile.getName();BufferedReader br=new BufferedReader(newInputStreamReader(clientsocket.getInputStream();String over=n;byte byname=(fileName+over).getByt

44、es();System.out.println(new String(byname);ps.write(byname);ps.flush();String gh=br.readLine();String tmp=String.valueOf(size)+over;byte bysize=tmp.getBytes();ps.write(bysize);ps.flush();String jj=br.readLine();ReadT2=上传的文件为+gh.trim()+; n大小为+jj.trim()+ n; te*tarea.append(ReadT2); FileInputStream in

45、=new FileInputStream(myfile); BufferedInputStream bf=new BufferedInputStream(in); ff=newbyte1024;int c;while(c=bf.read(ff)!=-1) ps.write(ff,0,c); ps.close(); bf.close(); in.close(); clientsocket.close(); ReadT3=文件传输完毕!;catch(E*ception e)/e.printStackTrace();/接收文件publicsynchronizedvoid run()tryDataInputStream br=new DataInputStream(clientsocket.getInputStream();DataOutputStream output=new DataOutputStream(clientsocket.getOutputStream();byte nn=newbyte225;br.read(nn)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论