`
胖好汉
  • 浏览: 6651 次
社区版块
存档分类
最新评论

简单聊天室如何传输文本和聊天

 
阅读更多

       对于用户来说,出现在他们眼前的是客户端,一般来说,服务端是看不见的,所以说,服务端就是起到了一个传输与连接各个客户端的作用。那么在传送文件和聊天内容时,要怎么书写服务端呢?下面来看:

 

服务端

       无论是什么服务端,至少是需要等待客户端接入的,所以这段代码是大家都很熟悉的

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简易聊天室"项目中,我们探讨的是如何使用socket建立一个简单的聊天环境,允许用户进行文本交流,并且具备传输文件的功能。不过,根据标题指出,当进行文件传输时可能会导致阻塞问题,这通常与I/O模型...

    Java课程设计(简易聊天室)

    Java课程设计——简易聊天室 在Java编程领域,课程设计是学习过程中不可或缺的一部分,它旨在让学生将所学理论知识应用于实际项目中。本项目“Java课程设计(简易聊天室)”就是一个很好的实践案例,它涵盖了网络...

    Android简易版聊天室

    在本文中,我们将深入探讨如何构建一个简单的Android聊天室应用,以及它与PC服务器端和客户端的交互。这个"Android简易版聊天室"项目旨在提供一个基础架构,用于理解多平台间实时通信的工作原理。 首先,我们要理解...

    新手学习简易聊天室

    这是一份专为初学者设计的简易聊天室项目,旨在帮助他们理解和掌握聊天室的基本构建与运作原理。在IT行业中,聊天室是一种常见的实时通讯应用,它允许用户之间进行实时的文字、语音或者视频交流。通过这个项目,你将...

    Java简易聊天室源码

    【Java简易聊天室源码】是一个专为初学者设计的编程学习资源,它提供了一个完整的Java聊天室项目,便于在MyEclipse集成开发环境中直接运行和学习。这个压缩包包括了必要的源代码和一个README.txt文件,帮助用户理解...

    简易聊天室C#源程序

    【简易聊天室C#源程序】是一个用于学习和理解C#编程语言中网络通信和多线程技术的应用实例。这个项目旨在帮助开发者掌握如何构建一个基础的在线聊天平台,允许用户进行实时交流。通过分析和研究这个源代码,我们可以...

    C#简易聊天室

    【C#简易聊天室】项目是一个使用C#编程语言实现的简单网络聊天应用程序,它基于Socket通信技术,能够在Linux环境下运行。在这个项目中,开发者利用了C#的强大特性和Socket库来实现客户端与服务器之间的实时通信,...

    Ajax开发的简易聊天室

    通过学习和实践这个“Ajax开发的简易聊天室”项目,你将对Ajax技术有更深入的理解,并能掌握构建实时Web应用的基本技能。同时,这个项目也可以帮助你锻炼前后端通信、数据处理以及用户体验优化等方面的能力。

    Java基于UDP传输协议的简单聊天室

    实现简易聊天室程序时,我们需要考虑以下几个关键部分: 1. **服务器端**:创建`DatagramSocket`监听特定端口,循环接收`DatagramPacket`。接收到数据后,解析JSON,提取消息信息,然后广播给所有连接的客户端。...

    JSP简单聊天室

    在这个“JSP简单聊天室”项目中,我们利用了JSP的核心特性,结合Servlet和JavaBean,构建了一个基本的在线聊天应用。这个聊天室仅使用`application`对象来实现数据共享,方便用户间实时交流。 **1. JSP基础** JSP...

    python聊天室---pyqt5+socket+Thread聊天室

    综上所述,"python聊天室---pyqt5+socket+Thread聊天室"项目涵盖了Python GUI编程、网络通信和并发处理等多个核心概念。通过学习和实践该项目,开发者不仅能掌握PyQt5的使用,还能深入了解Socket编程和多线程技术,...

    简单的聊天室

    【标题】"简单的聊天室"涉及的是创建一个基础的在线交流平台,通常称为聊天室,让用户可以实时发送和接收消息。这种系统的核心是实现客户端(Client)与服务器端(Server)之间的通信,允许用户通过网络进行互动。在...

    websocket简易聊天室

    总的来说,"websocket简易聊天室"项目展示了如何利用SpringBoot和WebSocket构建一个实时的、互动性强的Web应用。通过学习和实践这个项目,开发者可以深入理解WebSocket的工作原理,以及在实际项目中如何结合...

    java功能聊天室代码一个简单的聊天室

    在本文中,我们将深入探讨一个简单的Java聊天室的实现,包括其设计原理、核心功能以及如何通过`Chatroom.class`和`Chatroom.java`这两个文件实现聊天室的基本功能。 ### 一、Java聊天室基础 1. **网络通信**:Java...

    网络编程课程设计 简单聊天室 C++

    5. **消息格式**: 在聊天室中,需要定义一种消息格式,比如JSON或自定义的文本格式,用于表示用户发送的消息,包括发送者、接收者和消息内容等信息。 6. **用户身份验证与管理**: 聊天室可能需要用户登录,因此需要...

    Java画面精美的简易聊天室

    【Java画面精美的简易聊天室】是一个利用Java技术开发的,设计精良的实时通信应用。这个项目旨在为用户提供一个简单、直观且视觉效果良好的聊天环境。通过CSDN博客作者lly1122334分享的文章,我们可以了解到这个聊天...

    简单的web聊天室

    【简单的Web聊天室】是一个基于JQuery和.NET技术构建的在线聊天应用。它以其简洁的架构和易用性为特点,主要由静态HTML页面和一个动态的`ajax.aspx`页面组成,这使得整个系统的维护和扩展相对较为方便。在这个项目中...

    java简单聊天室源代码

    在聊天室中,Socket用于建立客户端和服务端之间的连接,传输数据。服务端通过ServerSocket监听特定端口,等待客户端的连接请求,而客户端则通过Socket连接到服务器。 2. **多线程**:在聊天室中,服务端通常需要...

    简单聊天室java代码

    【标题】"简单聊天室java代码"所涉及的知识点主要集中在Java编程语言和网络编程领域,尤其是构建基于Java的实时通信应用。这个项目可能是一个基本的多用户交互平台,允许用户通过网络发送和接收文本消息。 【描述】...

    简易聊天室.zip

    在本项目"简易聊天室.zip"中,开发者利用JAVA GUI(图形用户界面)和TCP(传输控制协议)网络编程技术,构建了一个具有登陆注册功能的简单聊天应用。这个项目主要涵盖了以下几个关键知识点: 1. **JAVA GUI**:GUI...

Global site tag (gtag.js) - Google Analytics