对于用户来说,出现在他们眼前的是客户端,一般来说,服务端是看不见的,所以说,服务端就是起到了一个传输与连接各个客户端的作用。那么在传送文件和聊天内容时,要怎么书写服务端呢?下面来看:
服务端
无论是什么服务端,至少是需要等待客户端接入的,所以这段代码是大家都很熟悉的
public void setServer(int port){ try { ServerSocket ss = new ServerSocket(port); while(true){ Socket s = ss.accept(); process(s); } } catch (IOException e) { e.printStackTrace(); } }
在等待客户机接入后,ss.accept();获取输入输出流,这里注意使用DataOutputStream来方便读取原始类型的流。发送方发送消息时,必须按照顺序和格式将数据依次写入输出流对象中。 服务器端在读取时:
(1)首先读取一个 int 型数据,即消息的总长度。
(2)再读取一个 byte 数据,即消息类型值,根据其值,判定这条消息是文本还是文件。
(3)如果消息类型值是 1,则认为是文本聊天消息。然后读取一个 int 型,作为接收方的号
码。根据协议的规则,总长度=(消息长度字段的 4 个字节)+类型的 1 个字节+接收号码的 4 个字节+
消息内容字节长度,余下的长度,则是聊天内容的字节个数,假设是 MsgLen;最后读取 MsgLen
个字节,组成一个字符串,就是用户聊天的内容。
(4)如果类型是 2,则是文件消息。读取接收方号码后,再读取 256 个字节组成一个字符串
当做文件名。如果发送时文件名是abc.gif,长度还是 256 字节。因为根据协议,这个字段的固定
长度是 256 个字节。 发送时,不足256 字节则补足二进制 0(‘\0’)。 对方接收后,只要去掉所读
取字节转成的字符串末尾的空格,得到的就是发送的文件名。 最后,用总长度减掉前面每个字段的
长度,余下的数字就是要读取的文件内容的字节长度,将这些字节读入,存放到文件中,即完成
了文件的传送。
protected void startFile(Socket s) { byte[] bt = null ; int len =0; DataInputStream dis ; FileOutputStream fos ; String filePath="F:/c盘内容/Desktop/xin.mp4" ; try { filePath=s.getInputStream().toString(); System.out.println(filePath); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { dis=new DataInputStream (s.getInputStream()); //Flie f = new File(); fos = new FileOutputStream(new File("F:/c盘内容/Desktop/"+filePath)); bt=new byte[1024]; while((len=dis.read(bt,0,bt.length))>0){ fos.write(bt, 0, len); fos.flush(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
完成了服务器端后就是客户端了,这一部分不是十分的难,所以,代码出来吧~!
private void setUP(int port) throws IOException { FileInputStream fis =null; DataOutputStream dos = null; byte[] bt =null; int len =0; Socket socket=null; File f = new File("G:/学习资料/two.avi"); try { File file = new File("G:/六维/8分钟腹肌锻炼第1级.avi"); //要传输的文件路径 long l = f.length(); double sumL=0; String str = file.getName(); socket = new Socket(); socket.connect(new InetSocketAddress("127.0.0.1", 9090)); dos = new DataOutputStream(socket.getOutputStream()); fis = new FileInputStream(file); bt = new byte[2048]; bt=str.getBytes(); dos.write(bt); dos.flush(); System.out.println(str); while ((len = fis.read(bt, 0, bt.length)) > 0) { sumL+=len; //System.out.println("已传输:"+((sumL/l)*100)+"%"); dos.write(bt, 0, len); dos.flush(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if (dos != null) dos.close(); if (fis != null) fis.close(); if (socket != null) socket.close(); } }
相关推荐
在这个"socket简易聊天室"项目中,我们探讨的是如何使用socket建立一个简单的聊天环境,允许用户进行文本交流,并且具备传输文件的功能。不过,根据标题指出,当进行文件传输时可能会导致阻塞问题,这通常与I/O模型...
Java课程设计——简易聊天室 在Java编程领域,课程设计是学习过程中不可或缺的一部分,它旨在让学生将所学理论知识应用于实际项目中。本项目“Java课程设计(简易聊天室)”就是一个很好的实践案例,它涵盖了网络...
在本文中,我们将深入探讨如何构建一个简单的Android聊天室应用,以及它与PC服务器端和客户端的交互。这个"Android简易版聊天室"项目旨在提供一个基础架构,用于理解多平台间实时通信的工作原理。 首先,我们要理解...
这是一份专为初学者设计的简易聊天室项目,旨在帮助他们理解和掌握聊天室的基本构建与运作原理。在IT行业中,聊天室是一种常见的实时通讯应用,它允许用户之间进行实时的文字、语音或者视频交流。通过这个项目,你将...
【Java简易聊天室源码】是一个专为初学者设计的编程学习资源,它提供了一个完整的Java聊天室项目,便于在MyEclipse集成开发环境中直接运行和学习。这个压缩包包括了必要的源代码和一个README.txt文件,帮助用户理解...
【简易聊天室C#源程序】是一个用于学习和理解C#编程语言中网络通信和多线程技术的应用实例。这个项目旨在帮助开发者掌握如何构建一个基础的在线聊天平台,允许用户进行实时交流。通过分析和研究这个源代码,我们可以...
【C#简易聊天室】项目是一个使用C#编程语言实现的简单网络聊天应用程序,它基于Socket通信技术,能够在Linux环境下运行。在这个项目中,开发者利用了C#的强大特性和Socket库来实现客户端与服务器之间的实时通信,...
通过学习和实践这个“Ajax开发的简易聊天室”项目,你将对Ajax技术有更深入的理解,并能掌握构建实时Web应用的基本技能。同时,这个项目也可以帮助你锻炼前后端通信、数据处理以及用户体验优化等方面的能力。
实现简易聊天室程序时,我们需要考虑以下几个关键部分: 1. **服务器端**:创建`DatagramSocket`监听特定端口,循环接收`DatagramPacket`。接收到数据后,解析JSON,提取消息信息,然后广播给所有连接的客户端。...
在这个“JSP简单聊天室”项目中,我们利用了JSP的核心特性,结合Servlet和JavaBean,构建了一个基本的在线聊天应用。这个聊天室仅使用`application`对象来实现数据共享,方便用户间实时交流。 **1. JSP基础** JSP...
综上所述,"python聊天室---pyqt5+socket+Thread聊天室"项目涵盖了Python GUI编程、网络通信和并发处理等多个核心概念。通过学习和实践该项目,开发者不仅能掌握PyQt5的使用,还能深入了解Socket编程和多线程技术,...
【标题】"简单的聊天室"涉及的是创建一个基础的在线交流平台,通常称为聊天室,让用户可以实时发送和接收消息。这种系统的核心是实现客户端(Client)与服务器端(Server)之间的通信,允许用户通过网络进行互动。在...
总的来说,"websocket简易聊天室"项目展示了如何利用SpringBoot和WebSocket构建一个实时的、互动性强的Web应用。通过学习和实践这个项目,开发者可以深入理解WebSocket的工作原理,以及在实际项目中如何结合...
在本文中,我们将深入探讨一个简单的Java聊天室的实现,包括其设计原理、核心功能以及如何通过`Chatroom.class`和`Chatroom.java`这两个文件实现聊天室的基本功能。 ### 一、Java聊天室基础 1. **网络通信**:Java...
5. **消息格式**: 在聊天室中,需要定义一种消息格式,比如JSON或自定义的文本格式,用于表示用户发送的消息,包括发送者、接收者和消息内容等信息。 6. **用户身份验证与管理**: 聊天室可能需要用户登录,因此需要...
【Java画面精美的简易聊天室】是一个利用Java技术开发的,设计精良的实时通信应用。这个项目旨在为用户提供一个简单、直观且视觉效果良好的聊天环境。通过CSDN博客作者lly1122334分享的文章,我们可以了解到这个聊天...
【简单的Web聊天室】是一个基于JQuery和.NET技术构建的在线聊天应用。它以其简洁的架构和易用性为特点,主要由静态HTML页面和一个动态的`ajax.aspx`页面组成,这使得整个系统的维护和扩展相对较为方便。在这个项目中...
在聊天室中,Socket用于建立客户端和服务端之间的连接,传输数据。服务端通过ServerSocket监听特定端口,等待客户端的连接请求,而客户端则通过Socket连接到服务器。 2. **多线程**:在聊天室中,服务端通常需要...
【标题】"简单聊天室java代码"所涉及的知识点主要集中在Java编程语言和网络编程领域,尤其是构建基于Java的实时通信应用。这个项目可能是一个基本的多用户交互平台,允许用户通过网络发送和接收文本消息。 【描述】...
在本项目"简易聊天室.zip"中,开发者利用JAVA GUI(图形用户界面)和TCP(传输控制协议)网络编程技术,构建了一个具有登陆注册功能的简单聊天应用。这个项目主要涵盖了以下几个关键知识点: 1. **JAVA GUI**:GUI...