Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2011, 21:33   #1
kestugar
Пользователь
 
Регистрация: 25.03.2011
Сообщений: 28
Стрелка Чат с передачей изображения на Java

Мне нужно добавить обработчик передачи изображения от одного клиента другому (через сервер).
Сделать кнопку, предположим, "отправить изображение", при нажатии на которую будет отправляться изображение. Предположим 1 клиент отправляет второму картинку. После нажатии кнопки "отправить изображение", у второго клиента появляется сообщение на прием изображения (Да\Нет) и при нажатии "Да" картинка появляется у него под своей фотографией.
Язык Java. Если кому надо-прилагаю архив с файлами чата.
Если будет не трудно-сделайте комментарии к коду.
Заранее спасибо.

Сервер:
Код:
package chat;
 
import java.io.*;
import java.net.*;
import java.util.*;
 
public class ChatServer {
 
  static Hashtable client = new Hashtable();
 
  static int curID = 1;
 
  static final int PORT_num = 8080;
 
  public static void main(String arg[])
  {
 
  try
     {
     ServerSocket s = new ServerSocket(PORT_num);
      for(;;)
        {
        Socket connection = s.accept();
        ClientConnect c = new ClientConnect(connection);
        c.id = "" + curID++;
        client.put(c.id,c);
 
        System.out.println("New client" + c.id);
        new Thread(c).start();
        c.send("!START!" + c.id);
        }
    }
 
  catch(IOException e)
    {
      System.out.println("no connect:" + e );
    }
  }
 
  public static synchronized void broadcast(String buf)
  {
    for (Enumeration en = client.elements(); en.hasMoreElements();)
      {
      ClientConnect c = (ClientConnect)en.nextElement();
      c.send(buf);
      }
  }
 
  public static synchronized void disconnected(ClientConnect c)
  {
    client.remove(c.id);
  }
 
 
  public ChatServer()
  {
   try
    {
      jbInit();
    }
   catch(Exception e)
    {
     e.printStackTrace();
    }
  }
 
  public void jbInit() throws Exception
  {
  }
}
 
class ClientConnect implements Runnable
{
  Socket socket;
  InputStream in;
  OutputStream out;
  String id;
  ClientConnect(Socket s)
  {
  socket = s;
    try
    {
      in = s.getInputStream();
      out = s.getOutputStream();
    }
    catch(IOException ee)
    {
      System.out.println("no client connect:" + ee );
 
    }
  }
  public void run()
  {
    char c[] = new char[1];
    StringBuffer buf = new StringBuffer("");
    String s = new String("");
 
      try
      {
      for(;;)
      {
        byte getByte = (byte) in.read();
 
        if (getByte == 0)
        {
          s = new String(buf);
          if (s.equals("!EXIT!")) break;
          ChatServer.broadcast(s);
          buf = new StringBuffer("");
        }
        else
        buf.append((char)getByte);
      }
      System.out.println("client "+id+" was closed");
      }
      catch(IOException ee)
      {
        ChatServer.disconnected(this);
      }
      try
      {
      in.close();
      out.close();
      socket.close();
      System.out.println("client " + id + " was closed" );
      }
      catch(IOException exp)
      {
      }
      return;
      }
 
    public synchronized void send(String buf)
    {
      try
      {
        for (int i = 0; i<buf.length();i++)
        out.write(buf.charAt(i));
        out.write(0);
        out.flush();
      }
      catch(IOException e)
      {
        ChatServer.disconnected(this);
          try{
          in.close();
          out.close();
          socket.close();
          }
          catch(IOException exp)
           {
           }
          return;
    }
 
  }
}
Вложения
Тип файла: rar Чат.rar (16.2 Кб, 28 просмотров)
kestugar вне форума Ответить с цитированием
Старый 17.11.2011, 21:34   #2
kestugar
Пользователь
 
Регистрация: 25.03.2011
Сообщений: 28
По умолчанию

Клиент:
Код:
package chat;
import java.applet.Applet;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.awt.*;
 
public class ChatClient extends java.applet.Applet implements Runnable,
ActionListener
{
TextField clientName;
TextField clientSay;
TextArea chat;
InputStream sin;
OutputStream sout;
Socket socket;
 
public void init()
  {
  String host = "localhost";
  int port = 8080;
  clientName = new TextField("",10);
  chat = new TextArea("",10,50);
  clientSay = new TextField("",50);
  clientSay.addActionListener(this);
  add(clientName);
  add(chat);
  add(clientSay);
  chat.setEditable(false);
  clientName.setEditable(false);
  try
    {
    socket = new Socket(host,port);
    sin = socket.getInputStream();
    sout = socket.getOutputStream();
    }
  catch(Exception e)
  {System.out.println("No connect: " + e);}
 
  new Thread(this).start();
  }
 
  public void run()
  { char c[] = new char[1];
  StringBuffer buf = new StringBuffer("");
  try
  { for(;;)
    {
      byte getByte = (byte)sin.read();
      if (getByte!=0)
      {c[0] = (char)getByte;
       buf.append(c);
      }
      else
      { String ss = new String(buf);
        if (ss.length() > 7 && ss.substring(0,7).equals("!START!"))
        {clientName.setText(ss.substring(7));}
        else chat.append(ss+"\n");
        buf = new StringBuffer("");}}}
 
      catch(IOException ee)
      {System.out.println("No input: " + ee);}
    }
      public void actionPerformed(ActionEvent evt)
      {
       send(clientName.getText() + ">" + clientSay.getText());}
 
      private synchronized void send(String s)
      {
       try{
          for(int i = 0; i<s.length();i++)
          sout.write((byte)s.charAt(i));
          sout.write(0);
          sout.flush();
          }
       catch(IOException e)
       {System.out.println("No out: " + e);
       clientSay.setText("");
       }
   }
 
      public synchronized void destroy()
      {
      send("!EXIT!");
        try
          {sin.close();
          sout.close();
          socket.close();
          }
        catch(IOException e)
        {System.out.println("No close: " + e);
        }
      }
  }
kestugar вне форума Ответить с цитированием
Старый 17.11.2011, 21:38   #3
kestugar
Пользователь
 
Регистрация: 25.03.2011
Сообщений: 28
По умолчанию

Код Апплета:
Код HTML:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
<TITLE>
HTML Test Page
</TITLE>
</HEAD>
<BODY>
Chat.ChatClient will appear below in a Java enabled browser.<BR>
<APPLET
  CODEBASE = "."
  CODE     = "Chat.ChatClient.class"
  NAME     = "ChatApplet"
  WIDTH    = 400
  HEIGHT   = 300
  HSPACE   = 0
  VSPACE   = 0
  ALIGN    = middle
>
</APPLET>
 <img src = "111.jpg">
</BODY>
</HTML>
kestugar вне форума Ответить с цитированием
Старый 28.11.2011, 19:11   #4
kestugar
Пользователь
 
Регистрация: 25.03.2011
Сообщений: 28
По умолчанию

Тема актуальна
kestugar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с передачей( фтпуд17 Свободное общение 5 27.01.2011 11:23
проблема с передачей параметров Mira-girl Общие вопросы по Java, Java SE, Kotlin 2 22.11.2010 23:59
Java загрузка изображения Sasha9132 Общие вопросы по Java, Java SE, Kotlin 1 17.11.2010 09:53
Проблема с передачей файла BleStaR C++ Builder 1 15.02.2010 20:37