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

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

阅读更多

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

 

服务端

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

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的聊天室系统

    而对于功能的需求,针对所要开发的软件,主要是文本聊天、文件传输、视频聊天和电脑桌面实时发送的功能。用户首先根据需要连接的对象确定对方的IP地址和需要进行连接的端口号。服务器在开启侦听并接收到连接请求之后...

    P2P网页版视频聊天室

    1、直播低延时、文本数据即时传输 2、多媒体直播不耗费任何服务器资源,对服务器无负载 3、带宽占用低 4、视频高清,采用H264高清编码,影响更清晰,传输更流畅 5、无需架设额外的视频流媒体服务器,节省60%~90%的...

    VB 、SQL 局域网内部的聊天软件 报告

     在聊天室里进行聊天 ,为用户提供简单方便的操作界面。  实现了清空聊天记录,显示本地IP地址,服务器IP。  选择两个选项按钮,可以选择是选择键发送消息,还是回车发送。  可以显示局域网内在线人数,以及...

    MFC实现的简单c/s聊天程序

    客户端基于WSAASsyncSelect异步消息模型,服务器端使用链表管理多客户端连接,支持文本、语音传输,含MFC项目文件、详细实验报告

    python-chatroom:第一阶段项目,完成度90%,基于TCP的python聊天室

    简易聊天室 Author: by @jeremyjone Date: 2018-5-10 项目会保存在: 功能 用AES加密所有的传输内容 用MD5 + 加盐 的方式存储密码,加盐字符由客户端和服务器共同生成 使用数据库存储用户信息、好友关系、房间信息...

    Java源码包100个设计实例.zip

    iCHAT聊天室基于Java.rar IP定位器.rar J2ME优化压缩PNG文件.rar J2ME冒险游戏CASPER源代码.rar J2me月光战机游戏源码.rar J2ME黑白棋游戏手机版 v2.1完整源码.rar JasperReports 报表类库v3.5.rar Java 3DMenu 界面...

    基于java的毕业设计合集80例

    局域网聊天室 局域网飞鸽传书 手机游戏堡垒 打飞机游戏 打飞机游戏 扫雷游戏 文件传输 文件压缩与解压缩 文本编辑器 新闻发布及管理 旅游网站 无线网络移动端的俄罗斯方块游戏 本地监听与远程端口扫描 模拟写字板 ...

    网络编程实用教程(第三版).zip

    5.5.3 聊天室服务器端程序的主要实现代码和分析 154 5.5.4 创建聊天室的客户端程序 162 5.5.5 聊天室客户端程序的主要实现代码和分析 163 习题 170 实验 170 第6章 WinInet编程 172 6.1 MFC WinInet类 ...

    基于java的毕业设计合集70例.zip

    局域网聊天室 局域网飞鸽传书 手机游戏堡垒 打飞机游戏 打飞机游戏 扫雷游戏 文件传输 文件压缩与解压缩 文本编辑器 新闻发布及管理 旅游网站 无线网络移动端的俄罗斯方块游戏 本地监听与远程端口扫描 模拟写字板 ...

    java源码包---java 源码 大量 实例

    java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥  ...

    java编程100例

    实例66 聊天室服务器 实例67 聊天室客户端 实例68 组播组中发送和接受数据 实例69 时间日期服务器 实例70 FTP连接与浏览 实例71 HTTP连接与浏览 实例72 数据压缩与传输 实例73 Telnet客户端 实例74 创建和配置数据源...

    java源码包2

    java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,...

    java源码包3

    java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,...

    java源码包4

    java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个目标文件 摘要:Java源码,网络相关,浏览器 Java编写的HTML浏览器源代码,一个很...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个目标文件 摘要:Java源码,网络相关,浏览器 Java编写的HTML浏览器源代码,一个很...

    java jdk实列宝典 光盘源代码

    聊天室服务器端,Chatserver.java;聊天室客户端,ChatClient.java; Ftp客户端,Mainframe.java; 14数据库 连接各种数据库DBconnector.java; 获得数据库和表的元数据Getmetadata.java; 查询和更新数据库...

    JAVA上百实例源码以及开源项目源代码

    JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个目标文件 摘要:Java源码,网络相关,浏览器 Java编写的HTML浏览器源代码,一个很...

    企业即时通讯源码

    系统采用先进的点对点通讯技术,消息(包括文本、语音、视频、文件)的传输大多数情况不需要经服务器中 转而直接发往接收者所使用的机器,传输速度更快。而且因服务器仅仅只是起着维护用户状态列表的功能,因 ...

Global site tag (gtag.js) - Google Analytics