当前位置:首页 > CN2资讯 > 正文内容

我的世界java版怎么op

5天前CN2资讯



  前几日写的一篇简陋之极的java聊天室被各位前辈说是,一塌糊涂,乌烟瘴气,只是简单的实现了需要的功能,并未做到人性化。在下痛定思痛,心想还是先学会显示功能再做美化界面,美化代码的打算!

      在奋斗了一天之后终于完成了集图片,文字,直线等功能为一体的群聊天室。先分析代码如下:

 

关于界面什么的我就不说了,笔者在前面的博客中有提过!直接附上各种功能的实现方法。

首先我们要传送信息,必须要让被传送的对象知道我们传送的是什么东西,所以在传送信息之前,我们首先要确定一个协议,比如说当客户端接收到的第一个int 值为1的时候,它接下来就要再接收4个int值,据此来画一条直线,而我服务器画一条直线的时候可以获得该直线的四个int值,但是在利用IO流发送这四个int值的时候,我首先要先发送一个1,也就是说我每次在要发送一天直线之前就要先发送一个1,当然在客户端读取的时候,我们第一次读取到的是1,就接收四个int。当读完四个int之后并画完一条直线之后我们还要读取数据,如果还是1的话,我们继续上面的操作,如果读取的是2,按照规定的协议,我们就调用相应的方法即可!!!!

现附上服务器发送直线的代码如下,该代码是写在界面类里面的内部类:

1. //鼠标进入事件 2. MouseListener ms=(new 3. public void 4. 5. x1=e.getX(); 6. y1=e.getY(); 7. } 8. public void 9. int 10. int 11. g.drawLine(x1,y1,x2,y2); 12. 1); 13. ChatTools.castbyte(x1); 14. ChatTools.castbyte(y1); 15. ChatTools.castbyte(x2); 16. ChatTools.castbyte(y2); 17. } 18. public void 19. public void 20. public void 21. }); 22. jp.addMouseListener(ms);



 

 

当然相应的我们也要在客户端定义一个读取数据的方法,首先我们要判断发送过来的是什么东西,我设置的协议是,如果首先读到的是1,接下来就画直线,如果读到的是2,接下来就接收一张图片,如果读到的是4,接下来读到的就是一段文字。该方法是放在客户端的线程中的,并且在线程的Run方法中调用该方法。

并且在每执行完一次操作之后,便再次读取一个int值,再次判断该int值为多少,以便得到下一个执行的指令。

 

 

1. public void 2. try{ 3. ins=client.getInputStream(); 4. OutputStream out=client.getOutputStream(); 5. new 6. new 7. int 8. while(true){ 9. //如果读到的是1,调用读取线段的方法 10. if(t==1){ 11. readline(); 12. } 13. //读到的是2则调用接受画面的方法 14. if(t==2){ 15. readPic(); 16. } 17. //如果读到的是4,则调用接受文字的方法 18. if(t==4){ 19. readMsg(); 20. } 21. t=dis.readInt(); 22. } 23. catch(Exception ef){ 24. ef.printStackTrace(); 25. } 26. }



 

当判断int值为1的时候,我们就调用画直线的方法,该方法如下


1. //定义一个读取线段的方法 2. public void 3. try 4. int 5. int 6. int 7. int 8. g.drawLine(x1,y1,x2,y2); 9. catch 10. e.printStackTrace(); 11. } 12. }



 

 

 

当然,我们需要在客户端和服务器都要定义相同功能的传送和接收方法。

现在我们再写一个文字的接收方法,首先我们会在文本输入框中输入字符,并获得该文本内容,每当按下发送这个按钮时便调用消息的传送方法,将该消息发送出去!

 

 

 

1. ActionListener al=(new 2. public void 3. String s=e.getActionCommand(); 4. if(s.equals("创建")){ 5. 6. new Chatserver(9090,jta,dout,g); 7. cs.start(); 8. } 9. //将服务器消息发给每个人 10. if(s.equals("发送")){ 11. String msg=jte1.getText(); 12. ChatTools.castMsg(msg); 13. "服务器说:"+msg+"\r\n"); 14. ""); 15. }



 

其中ChatTools.castMsg();是一个消息群发的方法,该方法在队列类里面定义的,代码如下


1. //将一个消息发送给所有人 2. ublic static void 3. ChatTools.castbyte(4); 4. for(int i=0;i<list.size();i++){ 5. ServerThread st=list.get(i); 6. "说:"+str); 7. }






 而sendMsg();则是一个消息的发送方法。该方法如下


1. //将发送消息的代码包装到一个方法中 2. public void 3. try{ 4. "\r\n"; 5. dout.write(msg.getBytes()); 6. //强制输出 7. dout.flush(); 8. catch(Exception ef){} 9. }



 

实现字符串传输的重中之重便是读取的方法,我们会首先获得一个为4的int值,然后我们就要调用字符串的读取方法


1. public void 2. try{ 3. new BufferedReader(new 4. String input=brd.readLine(); 5. "\r\n"); 6. catch(Exception ef){} 7. }



 我使用的BufferedReader缓冲流,实现整行读取的方式,该方式不会产生乱码,所以还是不错的。

 

 

而我今天要重点讲的便是图片从文件中读取和传送的方法。

首先我们要获得图片,再者我们要获取图片的宽度和高度,在循环遍历每个像素点,获取该点的颜色值,接着我们便在画布中调用画线的方法,依次画出每个像素点,并相应的给每个点附上相应的颜色即可。这样一张图片就在自己的画布上显示出来了!代码如下


1. ActionListener al=(new 2. public void 3. String s=e.getActionCommand(); 4. if(s.equals("创建")){ 5. 6. new Chatserver(9090,jta,dout,g); 7. cs.start(); 8. } 9. //将服务器消息发给每个人 10. if(s.equals("发送")){ 11. String msg=jte1.getText(); 12. ChatTools.castMsg(msg); 13. "服务器说:"+msg+"\r\n"); 14. ""); 15. } 16. if(s.equals("图片")){ 17. 18. try 19. new File("2.jpg")); 20. int 21. int 22. 23. for(int i=0;i<n;i++){ 24. for(int j=0;j<m;j++){ 25. rgb=image.getRGB(i,j); 26. System.out.println(i); 27. System.out.println(j); 28. new 29. g.setColor(color); 30. g.drawLine(i,j,i,j); 31. 2); 32. ChatTools.castbyte(rgb); 33. ChatTools.castbyte(i); 34. ChatTools.castbyte(j); 35. } 36. 37. } 38. } catch 39. e1.printStackTrace(); 40. }


 

能画出图片,当然我们就能发送图片,我们就能相应的读取图片,在发送图片信息的时候,我们每取出一个点,就能获得该店的颜色,我们就把该点横坐标和纵坐标以及颜色值发送过去。在接收端,我们会首先读到一个为2的int值,然后程序会调用图片的读取方法。方法如下



1. //图片的读取方法 2. public void 3. int 4. try 5. rgb = dis.readInt(); 6. int 7. int 8. new 9. g.setColor(color); 10. g.drawLine(i,j,i,j); 11. 12. catch 13. 14. e.printStackTrace(); 15. } 16. }

 



 值此,我们就实现了图片的发送功能了。我的代码也差不多了,至于如果有什么需要改进的地方请各位多多指教,本人是新手,迫切渴望成长,我也知道我的代码可定有很多漏洞,望不吝赐教!!!!!!!!!!!

 

现在附上具体的代码:服务器的四个类

界面类



1. import 2. import 3. import 4. import 5. import 6. import 7. import 8. import 9. import 10. import 11. 12. import 13. import 14. import 15. import 16. import 17. import 18. 19. public class 20. private int 21. private int 22. private 23. private 24. private int 25. 26. public void 27. new 28. " 服务器"); 29. 600,600); 30. null); 31. 3); 32. new JButton("创建"); 33. 0,0,60,30); 34. final JButton jm = new JButton("图片");// 实例化菜单栏的对象 35. &nb



    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/22117.html

    分享给朋友:

    “我的世界java版怎么op” 的相关文章

    宝塔面板PHP扩展新增指南:提升网站性能的实用技巧

    在日常网站管理和服务器配置中,宝塔面板的出现让这一切变得更为简单直观。作为一个流行的服务器控制面板,宝塔面板以其用户友好的界面和丰富的功能备受欢迎。对于没有技术背景的用户来说,它提供了极大的便利,而对于开发者来说,宝塔也能高效管理复杂的服务器配置。 宝塔面板不仅支持多种服务器环境,还能够轻松管理数据...

    如何开启BBR查询并提升TCP网络性能

    BBR(Bottleneck Bandwidth and Round-trip propagation time)是一种由Google开发的TCP拥塞控制算法,我对它的了解让我感到非常兴奋。BBR旨在通过精确的网络条件监测,以提高传输速度和稳定性。传统的拥塞控制算法往往依赖于丢包率的变化来调整传输速...

    双ISP配置:提升网络可靠性与速度的最佳解决方案

    双ISP,顾名思义,就是同时连接两个互联网服务提供商。这种配置听起来可能有点复杂,但其实它是为了确保我们在享受网络服务时能够拥有更高的可靠性和更好的体验。想象一下,当你正在进行重要的在线会议或下载一个大文件,网络突然断了,这可真让人头疼。而双ISP就能帮助我们避免这样的困境。 双ISP的基本概念是,...

    如何安全地开放所有端口并规避网络风险

    我第一次接触网络配置的时候,看到“开放所有端口”这个词,心里有些忐忑。其实,开放端口是网络通信中非常基础的概念。简单来说,端口就像是网络中的开口,允许不同的应用程序和服务进行数据交换。每个端口都有其独特的号码,从1到65535不等,其中小于1024的端口通常用于系统服务,而大于1024的端口就属于应...

    全面VPN测评:如何选择最适合你的虚拟私人网络服务

    VPN测评是评估虚拟私人网络(VPN)服务质量的一种方法。对我而言,了解VPN测评极为重要,因为它能帮助我做出明智的选择,以确保在使用互联网时的隐私和安全。VPN测评通常涉及多个方面,包括用户评价、性能测试和专业评测。 每个人使用VPN的需求都不尽相同,这就需要从不同的角度来分析VPN服务的优劣。用...

    瓦工职业特征与发展前景分析

    瓦工,这个听起来有些古老的职业,实际上在我们的社会中扮演着举足轻重的角色。它主要负责砌筑工作,用砖块、砌块和砂浆等材料建造房屋、烟囱等不同结构。北方地区的人们常常把瓦工称为泥工,虽然这两者有些细微差别,但归根结底,瓦工是建筑行业不可缺少的一个部分。 在瓦工的工作范围里,涉及到建筑砌体、隔墙、瓦片铺装...