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

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

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

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

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

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

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

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

Java代码  
  1. public void processServer(Socket client){
  2. try{
  3. ins=client.getInputStream();
  4. OutputStream out=client.getOutputStream();
  5. dis = new DataInputStream(ins);
  6. dout=new DataOutputStream(out);
  7. int t=dis.readInt();
  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的时候,我们就调用画直线的方法,该方法如下

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

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

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

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

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

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

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

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

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

Java代码  
  1. public void readMsg(){
  2. try{
  3. brd=new BufferedReader(new InputStreamReader(ins));
  4. String input=brd.readLine();
  5. jta.append(input +"\r\n");
  6. }catch(Exception ef){}
  7. }

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

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

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

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

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

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

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

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

界面类

Java代码  
  1. import java.awt.Color;
  2. import java.awt.Graphics;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import java.awt.event.MouseEvent;
  6. import java.awt.event.MouseListener;
  7. import java.awt.image.BufferedImage;
  8. import java.io.DataOutputStream;
  9. import java.io.File;
  10. import java.io.IOException;
  11. import javax.imageio.ImageIO;
  12. import javax.swing.JButton;
  13. import javax.swing.JFrame;
  14. import javax.swing.JPanel;
  15. import javax.swing.JTextArea;
  16. import javax.swing.JTextField;
  17. public class MainServer {
  18. private int x1;
  19. private int y1;
  20. private Graphics g;
  21. private DataOutputStream dout;
  22. private int rgb;
  23. public void ShowUI(){
  24. JFrame jf=new JFrame();
  25. jf.setTitle("       服务器");
  26. jf.setSize(600,600);
  27. jf.setLayout(null);
  28. jf.setDefaultCloseOperation(3);
  29. JButton jb=new JButton("创建");
  30. jb.setBounds(0,0,60,30);
  31. final JButton jm = new JButton("图片");// 实例化菜单栏的对象
  32. jm.setBounds(70,0,60,30);
  33. jf.add(jm);
  34. JButton jb1=new JButton("发送");
  35. jb1.setBounds(0,40,60,30);
  36. final JTextField jte1=new JTextField(30);
  37. jte1.setBounds(70,45,300,20);
  38. final JTextArea jta=new JTextArea(20,30);
  39. jta.setBounds(0,80,600,150);
  40. final JPanel jp=new JPanel();
  41. jp.setBounds(0,250,600,600);
  42. jf.add(jb);
  43. jf.add(jb1);
  44. jf.add(jte1);
  45. jf.add(jta);
  46. jf.add(jp);
  47. jf.setVisible(true);
  48. jp.setBackground(Color.gray);
  49. this.g=jp.getGraphics();
  50. ActionListener al=(new ActionListener(){
  51. public void actionPerformed(ActionEvent e){
  52. String s=e.getActionCommand();
  53. if(s.equals("创建")){
  54. Chatserver cs=new Chatserver(9090,jta,dout,g);
  55. cs.start();
  56. }
  57. //将服务器消息发给每个人
  58. if(s.equals("发送")){
  59. String msg=jte1.getText();
  60. ChatTools.castMsg(msg);
  61. jta.append("服务器说:"+msg+"\r\n");
  62. jte1.setText("");
  63. }
  64. if(s.equals("图片")){
  65. try {
  66. BufferedImage image = ImageIO.read(new File("2.jpg"));
  67. int m=image.getHeight();
  68. int n=image.getWidth();
  69. for(int i=0;i<n;i++){
  70. for(int j=0;j<m;j++){
  71. rgb=image.getRGB(i,j);
  72. System.out.println(i);
  73. System.out.println(j);
  74. Color color=new Color(rgb);
  75. g.setColor(color);
  76. g.drawLine(i,j,i,j);
  77. ChatTools.castbyte(2);
  78. ChatTools.castbyte(rgb);
  79. ChatTools.castbyte(i);
  80. ChatTools.castbyte(j);
  81. }
  82. }
  83. } catch (IOException e1) {
  84. e1.printStackTrace();
  85. }
  86. }
  87. }
  88. });
  89. jm.addActionListener(al);
  90. jb.addActionListener(al);
  91. jb1.addActionListener(al);
  92. //鼠标进入事件
  93. MouseListener ms=(new MouseListener(){
  94. public void mousePressed(MouseEvent e){
  95. x1=e.getX();
  96. y1=e.getY();
  97. }
  98. public void mouseReleased(MouseEvent e){
  99. int x2=e.getX();
  100. int y2=e.getY();
  101. g.drawLine(x1,y1,x2,y2);
  102. ChatTools.castbyte(1);
  103. ChatTools.castbyte(x1);
  104. ChatTools.castbyte(y1);
  105. ChatTools.castbyte(x2);
  106. ChatTools.castbyte(y2);
  107. }
  108. public void mouseClicked(MouseEvent e){}
  109. public void mouseEntered(MouseEvent e){}
  110. public void mouseExited (MouseEvent e){}
  111. });
  112. jp.addMouseListener(ms);
  113. }
  114. public static void main(String[] args){
  115. MainServer ms=new MainServer();
  116. ms.ShowUI();
  117. }
  118. }

处理客户机连接的两个线程类

Java代码  
  1. import java.awt.Graphics;
  2. import java.io.DataOutputStream;
  3. import java.net.ServerSocket;
  4. import java.net.Socket;
  5. import javax.swing.JTextArea;
  6. public class Chatserver extends Thread{
  7. private Graphics g;
  8. private int port;
  9. private JTextArea jta;
  10. private DataOutputStream dout;//输出流
  11. private ServerSocket ss;
  12. public Chatserver(int port,JTextArea jta,DataOutputStream dout,Graphics g){
  13. this.port=port;
  14. this.jta=jta;
  15. this.dout=dout;
  16. this.g=g;
  17. }
  18. public void run(){
  19. setUpServer(port);
  20. }
  21. //在指定端口上创建一个服务器
  22. public void setUpServer(int port){
  23. try{
  24. ss = new ServerSocket(port);
  25. System.out.println("服务器创建成功");
  26. //等待客户机连接,并设置成循环等待状态
  27. while(true){
  28. Socket client=ss.accept();
  29. System.out.println("欢迎进入我的服务器");
  30. //启动一个线程去处理该对象
  31. ServerThread st=new ServerThread(client,jta,dout,g);
  32. st.start();
  33. ChatTools.add(st);
  34. ChatTools.castMsg("有人上线!!目前在线人数"+ChatTools.getsize());
  35. }
  36. }catch(Exception ef){
  37. ef.printStackTrace();
  38. }
  39. }
  40. }
Java代码  
  1. import java.awt.Color;
  2. import java.awt.Graphics;
  3. import java.io.BufferedReader;
  4. import java.io.DataInputStream;
  5. import java.io.DataOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.InputStreamReader;
  9. import java.io.OutputStream;
  10. import java.net.Socket;
  11. import javax.swing.JTextArea;
  12. public class ServerThread extends Thread{
  13. private Socket client;//线程中处理的客户对象
  14. private DataOutputStream dout;//输出流
  15. private OutputStream out;//输出流
  16. private DataInputStream dis;//
  17. private JTextArea jta;
  18. private BufferedReader brd;
  19. private InputStream ins;
  20. //创建线程对象时要传入他要处理的连接对象
  21. private Graphics g;
  22. public ServerThread(Socket client,JTextArea jta,DataOutputStream dout,Graphics g){
  23. this.client=client;
  24. this.jta=jta;
  25. this.dout=dout;
  26. this.g=g;
  27. }
  28. public void readMsg(){
  29. try{
  30. brd=new BufferedReader(new InputStreamReader(ins));
  31. String input=brd.readLine();
  32. jta.append("客户说:"+input +"\r\n");
  33. ChatTools.castMsg(input);
  34. }catch(Exception ef){}
  35. }
  36. //将发送消息的代码包装到一个方法中
  37. public void sendMs(String msg){
  38. try{
  39. msg+="\r\n";
  40. dout.write(msg.getBytes());
  41. //强制输出
  42. dout.flush();
  43. }catch(Exception ef){}
  44. }
  45. public void run(){
  46. //在线程中 调用处理链接的方法
  47. processChat(this.client);
  48. }
  49. //处理客户机进入的连接对象
  50. public void processChat(Socket client){
  51. try{
  52. ins=client.getInputStream();
  53. out=client.getOutputStream();
  54. dis = new DataInputStream(ins);
  55. dout=new DataOutputStream(out);
  56. int t=dis.readInt();
  57. while(true){
  58. if(t==1){
  59. readline();
  60. }
  61. if(t==2){
  62. readPic();
  63. }
  64. if(t==4){
  65. readMsg();
  66. }
  67. t=dis.readInt();
  68. }
  69. }catch(Exception ef){
  70. ef.printStackTrace();
  71. }
  72. }
  73. //发送int型值得方法
  74. public void sendbyte(int x1){
  75. try{
  76. dout.writeInt(x1);
  77. dout.flush();
  78. }catch(Exception e){}
  79. }
  80. //图片的读取方法
  81. public void readPic(){
  82. int rgb;
  83. try {
  84. rgb = dis.readInt();
  85. int i=dis.readInt();
  86. int j=dis.readInt();
  87. Color color =new Color(rgb);
  88. g.setColor(color);
  89. g.drawLine(i,j,i,j);
  90. } catch (IOException e) {
  91. e.printStackTrace();
  92. }
  93. }
  94. //定义一个读取线段的方法
  95. public void readline() {
  96. try {
  97. int x1=dis.readInt();
  98. int y1=dis.readInt();
  99. int x2=dis.readInt();
  100. int y2=dis.readInt();
  101. g.drawLine(x1,y1,x2,y2);
  102. } catch (IOException e) {
  103. e.printStackTrace();
  104. }
  105. }
  106. }

一个队列类,用来存储连接进服务器的客户机对象类

Java代码  
  1. import java.util.ArrayList;
  2. import java.util.List;
  3. public class ChatTools {
  4. //保存处理线程的队列对象
  5. static List<ServerThread> list=new ArrayList<ServerThread>();
  6. private ChatTools(){
  7. }//不需要创建引类对象,构造器则私有
  8. //取得保存保存处理线程对象的队列
  9. public static List<ServerThread> getAllthread(){
  10. return list;
  11. }
  12. //将一个客户对应的处理线程对象加入到队列中
  13. public static void add(ServerThread st){
  14. //通知有人上线了
  15. list.add(st);
  16. }
  17. public static int getsize(){
  18. int i=list.size();
  19. return i;
  20. }
  21. //将一个消息发送给所有人
  22. public static void castMsg(String str){
  23. ChatTools.castbyte(4);
  24. for(int i=0;i<list.size();i++){
  25. ServerThread st=list.get(i);
  26. st.sendMs(i+"说:"+str);
  27. }
  28. }
  29. //定义一个字节群发的方法
  30. public static void castbyte(int x1){
  31. for(int i=0;i<list.size();i++){
  32. ServerThread st=list.get(i);
  33. st.sendbyte(x1);
  34. }
  35. }
  36. }

接下来便是客户机的两个类

界面类

Java代码  
  1. package 多人聊天室客户端;
  2. import java.awt.Color;
  3. import java.awt.Graphics;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import java.awt.event.MouseEvent;
  7. import java.awt.event.MouseListener;
  8. import java.awt.image.BufferedImage;
  9. import java.io.File;
  10. import java.io.IOException;
  11. import java.io.InputStream;
  12. import javax.imageio.ImageIO;
  13. import javax.swing.JButton;
  14. import javax.swing.JFrame;
  15. import javax.swing.JPanel;
  16. import javax.swing.JTextArea;
  17. import javax.swing.JTextField;
  18. public class Mainchat {
  19. private MainchatThread mt;
  20. private Graphics g;
  21. private int x1;
  22. private int y1;
  23. private InputStream ins;
  24. private int rgb;
  25. public void ShowUI(){
  26. JFrame jf=new JFrame();
  27. jf.setTitle("        客户机");
  28. jf.setSize(600,500);
  29. jf.setLocation(700,0);
  30. jf.setLayout(null);
  31. jf.setDefaultCloseOperation(3);
  32. JButton jb=new JButton("连接");
  33. jb.setBounds(0,0,60,30);
  34. final JButton jm = new JButton("图片");// 实例化菜单栏的对象
  35. jm.setBounds(70,0,60,30);
  36. jf.add(jm);
  37. JButton jb1=new JButton("发送");
  38. jb1.setBounds(0,40,60,30);
  39. final JTextField jte1=new JTextField(30);
  40. jte1.setBounds(70,45,300,20);
  41. final JTextArea jta=new JTextArea(20,30);
  42. jta.setBounds(0,80,600,150);
  43. JPanel jp=new JPanel();
  44. jp.setBounds(0,250,600,400);
  45. jf.add(jb);
  46. jf.add(jb1);
  47. jf.add(jte1);
  48. jf.add(jta);
  49. jf.add(jp);
  50. jf.setVisible(true);
  51. jp.setBackground(Color.gray);
  52. this.g=jp.getGraphics();
  53. ActionListener al=(new ActionListener(){
  54. public void actionPerformed(ActionEvent e){
  55. String s=e.getActionCommand();
  56. if(s.equals("连接")){
  57. try {
  58. mt=new MainchatThread("localhost",9090,jta,g,ins);
  59. if(mt.runing()){
  60. mt.start();
  61. }
  62. } catch (Exception e1) {
  63. e1.printStackTrace();
  64. }
  65. }
  66. //将消息发给别人
  67. if(s.equals("发送")){
  68. String msg=jte1.getText();
  69. jta.append("我说:"+msg+"\r\n");
  70. MainchatThread.sendbyte(4);
  71. mt.sendMsg(msg);
  72. System.out.println("消息已经发送");
  73. jte1.setText("");
  74. }
  75. if(s.equals("图片")){
  76. try {
  77. BufferedImage image = ImageIO.read(new File("2.jpg"));
  78. int m=image.getHeight();
  79. int n=image.getWidth();
  80. for(int i=0;i<n;i++){
  81. for(int j=0;j<m;j++){
  82. rgb=image.getRGB(i,j);
  83. System.out.println(i);
  84. System.out.println(j);
  85. Color color=new Color(rgb);
  86. g.setColor(color);
  87. g.drawLine(i,j,i,j);
  88. MainchatThread.sendbyte(2);
  89. MainchatThread.sendbyte(rgb);
  90. MainchatThread.sendbyte(i);
  91. MainchatThread.sendbyte(j);
  92. }
  93. }
  94. } catch (IOException e1) {
  95. e1.printStackTrace();
  96. }
  97. }
  98. }
  99. });
  100. jm.addActionListener(al);
  101. jb.addActionListener(al);
  102. jb1.addActionListener(al);
  103. jf.setVisible(true);
  104. MouseListener ms=(new MouseListener(){
  105. public void mousePressed(MouseEvent e){
  106. x1=e.getX();
  107. y1=e.getY();
  108. System.out.println(x1);
  109. }
  110. public void mouseReleased(MouseEvent e){
  111. int x2=e.getX();
  112. int y2=e.getY();
  113. g.drawLine(x1,y1,x2,y2);
  114. MainchatThread.sendbyte(1);
  115. MainchatThread.sendbyte(x1);
  116. MainchatThread.sendbyte(y1);
  117. MainchatThread.sendbyte(x2);
  118. MainchatThread.sendbyte(y2);
  119. }
  120. public void mouseClicked(MouseEvent e){}
  121. public void mouseEntered(MouseEvent e){}
  122. public void mouseExited (MouseEvent e){}
  123. });
  124. jp.addMouseListener(ms);
  125. }
  126. public static void main(String[] args){
  127. Mainchat ms=new Mainchat();
  128. ms.ShowUI();
  129. }
  130. }

线程类,用来运行客户机读取服务器发来的信息

Java代码  
  1. package 多人聊天室客户端;
  2. import java.awt.Color;
  3. import java.awt.Graphics;
  4. import java.io.BufferedReader;
  5. import java.io.DataInputStream;
  6. import java.io.DataOutputStream;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.io.InputStreamReader;
  10. import java.io.OutputStream;
  11. import java.net.Socket;
  12. import javax.swing.JTextArea;
  13. public class MainchatThread extends Thread{
  14. private static DataOutputStream dout;
  15. private InputStream ins;
  16. private BufferedReader brd;
  17. private int port;
  18. private String ip;
  19. private JTextArea jta;
  20. private Graphics g;
  21. private DataInputStream dis;
  22. private Socket socket;
  23. public MainchatThread(String ip,int port,JTextArea jta,Graphics g,InputStream ins){
  24. this.jta=jta;
  25. this.ip=ip;
  26. this.port=port;
  27. this.g=g;
  28. this.ins=ins;
  29. }
  30. public boolean runing(){
  31. try{
  32. socket=new Socket(this.ip,this.port);
  33. System.out.println("连接成功");
  34. InputStream ins=socket.getInputStream();
  35. OutputStream out=socket.getOutputStream();
  36. dis=new DataInputStream(ins);
  37. dout=new DataOutputStream(out);
  38. return true;
  39. }catch (Exception e){
  40. e.printStackTrace();
  41. }return false;
  42. }
  43. //图片的读取方法
  44. public void readPic(){
  45. int rgb;
  46. try {
  47. rgb = dis.readInt();
  48. int i=dis.readInt();
  49. int j=dis.readInt();
  50. Color color =new Color(rgb);
  51. g.setColor(color);
  52. g.drawLine(i,j,i,j);
  53. } catch (IOException e) {
  54. e.printStackTrace();
  55. }
  56. }
  57. //发送信息
  58. public void sendMsg(String msg){
  59. try{
  60. msg+="\r\n";
  61. dout.write(msg.getBytes());
  62. dout.flush();
  63. }catch(Exception ef){}
  64. }
  65. public static void sendbyte(int i){
  66. try{
  67. dout.writeInt(i);
  68. dout.flush();
  69. }catch(Exception ef){}
  70. }
  71. //读取服务端信息的方法
  72. public void readMsg(){
  73. try{
  74. brd=new BufferedReader(new InputStreamReader(ins));
  75. String input=brd.readLine();
  76. jta.append(input +"\r\n");
  77. }catch(Exception ef){}
  78. }
  79. public void readline(){
  80. try{
  81. int x1=dis.readInt();
  82. int y1=dis.readInt();
  83. int x2=dis.readInt();
  84. int y2=dis.readInt();
  85. g.drawLine(x1,y1,x2,y2);
  86. }catch(Exception ef){}
  87. }
  88. public void processServer(Socket client){
  89. try{
  90. ins=client.getInputStream();
  91. OutputStream out=client.getOutputStream();
  92. dis = new DataInputStream(ins);
  93. dout=new DataOutputStream(out);
  94. int t=dis.readInt();
  95. while(true){
  96. //如果读到的是1,调用读取线段的方法
  97. if(t==1){
  98. readline();
  99. }
  100. //读到的是2则调用接收图片的方法
  101. if(t==2){
  102. readPic();
  103. }
  104. //如果读到的是4,则调用接受文字的方法
  105. if(t==4){
  106. readMsg();
  107. }
  108. t=dis.readInt();
  109. }
  110. }catch(Exception ef){
  111. ef.printStackTrace();
  112. }
  113. }
  114. public void run(){
  115. processServer(socket);
  116. }
  117. }

至此完结!!!

java 聊天室之 传送图片文字等功能的实现相关推荐

  1. java 聊天室之 传送图片文字等功能的实现

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

  2. Java聊天室项目GUI界面化实现(Java聊天室 IO流 Socket流 GUI界面 )

    Java聊天室项目GUI界面化实现(Java聊天室 IO流 Socket流 GUI界面 ) 文章目录 Java聊天室项目GUI界面化实现(Java聊天室 IO流 Socket流 GUI界面 ) 1.J ...

  3. 多人群聊聊天室java_#java 聊天室(一)—— 实现一个简单Telnet多人群聊聊天室...

    #java    聊天室(一)--  实现一个简单Telnet多人群聊聊天室 学习本文须要先准备的知识点:队列(或数组).类与对象.线程.InputStream和OutputStream的使用.jav ...

  4. java聊天室报告ppt_基于JavaWeb聊天室设计与实现毕业论文+任务书+中期表+中期报告+项目源码+数据库+答辩PPT...

    摘 要 Web聊天室曾在因特网进入中国早期的时候被广泛使用,一度深受国内网民的青睐.随着腾讯QQ以及之后微信的普及,目前Web聊天室已然较少被使用.但在一些商业网站,例如BBS以及在线购物系统,还是会 ...

  5. java聊天室(实训项目)

    这里是我们实训的一个关于java聊天室的项目,有需要的同学可以看看,私聊功能未完善. 话不多说,直接上代码. 服务器: package ChatRoom;import java.awt.Color; ...

  6. Java聊天室的设计与实现

    Java聊天室系统主要用于实现在线聊天,基本功能包括:服务端和客户端.本系统结构如下: (1)服务端: 1.能够开启和关闭服务器 2.等待着客户端从特殊端口发送的请求 3.监听的端口并不是固定的,服务 ...

  7. java聊天室论文,JAVA聊天室毕业论文

    JAVA聊天室毕业论文 毕业设毕业设计计 姓 名 学 号 系 部 信息工程系信息工程系 专 业 软件技术软件技术 设计题目 聊天室(聊天室(JavaJava)) 指导教师 职 称 2012 年 07 ...

  8. Java聊天室程序源码 Java即时通讯代码 Java局域网聊天系统 Java即时通讯 Java聊天系统

    Java聊天室程序源码 Java即时通讯代码 Java局域网聊天系统  Java即时通讯 Java聊天系统 public Swingtest002() {// 设置标题setTitle("请 ...

  9. [java聊天室]多个客户端与服务器说话多线程(二)

    多客户端链接 之前(java聊天室一)只有第一个连接的客户端可以与服务端说话. 原因: 服务端只调用过一次accept方法,因此只有第一个客户端链接时服务端接受了链接并返回了Socket,此时可以与其 ...

最新文章

  1. java ajax 点赞功能_Ajax+jQuery+bootstrap+Java实现异步点赞功能,并限制点击次数
  2. 前端面试汇总(Bootstrap框架)
  3. 攻击者巧妙滥用谷歌 DoH 下载恶意软件
  4. c 语言程序设计形考任务一,C语言程序设计形考任务.doc
  5. 极限运动:街头极限单车,不只是牛逼!
  6. Ubuntu安装R及RStudio
  7. Java下载安装详细教程(超详细版)
  8. Flutter绘制虚线
  9. 验证码功能-简单实现
  10. 台式计算机如何连接vif,电脑各种接口规范
  11. unity材质球英文翻译
  12. 物联网技术实现农业自动化
  13. SIM卡中ICCID标识与IMSI的区别
  14. 在解锁Redmi 5A
  15. 读取文件云服务器bcc,读取文件云服务器bcc
  16. GB2312转unicode
  17. 微信公众号开发系列-12、微信前端开发利器:WeUI
  18. 腾讯会议摄像头黑屏如何解决?
  19. Webrtc 回音消除 一
  20. TUV南德与重庆赛宝于四川签署合作协议并联合举办多国认证研讨会

热门文章

  1. 宝玉的blog 专注于web开发技术
  2. 20222959 杨鸿刚 2022-2023-2 《网络攻防实践》 第十周作业
  3. HTML+CSS仿BMW官网
  4. 联想笔记本电脑老是自动选择桌面上最后一个图标,而且浏览网页鼠标自动拉到最底部的解决办法
  5. C++日常用的函数总结
  6. SQL语句之条件查询--WHERE(where)
  7. MySQL数据库——事务隔离级别Read uncommitted(一)
  8. Red-Blue Operations (Hard Version)
  9. 小幺鸡,简单好用的在线接口文档管理工具
  10. dell t110服务器做系统,企业第一台服务器 戴尔T110 II深度评测