게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[java] ActionListener 과 socket 프로그램 질문
게시물ID : programmer_21759짧은주소 복사하기
작성자 : 하얀사람
추천 : 0
조회수 : 339회
댓글수 : 0개
등록시간 : 2017/11/27 17:39:25
옵션
  • 본인삭제금지
1. fdsa란 패키지 안에 game.java파일과 Messenger.java파일이 있습니다. Messenger의 MyFrame 클래스에서 버튼을 눌렀을 때 game.java가 실행되려면 어떻게 해야하나요?

2. 프로그램을 실행할 때 이름을 입력하는 JOptionPane 창이 나오고 process 클래스와 actionPerformed 클래스에서 Myname과 Yourname 변수를 만들어서 채팅을 전송할 때 서로의 이름도 전송시키고 싶은데 어떻게 하나요? 예를 들어

이름을 입력하세요: 철수

철수:ㅎㅇ
영희:안녕

packet를 하나 추가해서 packet1엔 내용, packet2엔 이름 이런식으로 보내면 되나요?



아래는 소스입니다.





import java.io.*;
import java.net.*;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class MessengerA {
   protected JTextField textField;
   protected JTextArea textArea;
   DatagramSocket socket;
   DatagramPacket packet;
   InetAddress address = null;
   final int myPort = 5000;
   final int otherPort = 6000;
   protected String Myname="";
   protected String Yourname="";

   public MessengerA() throws IOException {
      MyFrame f = new MyFrame();
      address = InetAddress.getByName("127.1.0.150");
      socket = new DatagramSocket(myPort);
   }


public void process() {

   while(true) {
      try
      {
         byte[] buf=new byte[256];
         packet = new DatagramPacket(buf, buf.length);
         socket.receive(packet);
         
         textArea.append(Yourname+": "+ new String(buf)+"\n");
      }
      catch (IOException ioException) {
         ioException.printStackTrace();
      }
   }
}

class MyFrame extends JFrame implements ActionListener {

   public MyFrame() {
   

      super("MessengerA");
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           
      textField = new JTextField(20);
      textField.addActionListener(this);
      
      textArea=new JTextArea(30,10);
      JScrollPane s = new JScrollPane(textArea);
      
      JButton b = new JButton("게임 시작");
      b.setRolloverEnabled(true);
      b.addActionListener(new GameStart());

      Myname = JOptionPane.showInputDialog("이릅을 입력하세요");


      textArea.setEditable(false);
      add(textField, BorderLayout.PAGE_END);
      add(s, BorderLayout.CENTER);
      add(b,BorderLayout.PAGE_START);
      pack();
      setSize(300,400);
      setVisible(true);
      
      
   }
   public void actionPerformed(ActionEvent evt) {
      String s =textField.getText();
      byte[] buffer = s.getBytes();
      DatagramPacket packet;
 
      packet = new DatagramPacket(buffer, buffer.length,address,otherPort);
      try {
         socket.send(packet);
      } catch (IOException e ) {
         e.printStackTrace();
      }
      textArea.append(Myname+": "+s+"\n");
      textField.selectAll();
      textArea.setCaretPosition(textArea.getDocument().getLength());
   }
   
   class GameStart implements ActionListener {
   public void actionPerformed(ActionEvent e) {
   JButton b = (JButton) e.getSource();
   b.setText("게임이 시작되었습니다!");
   }
   }
}
public static void main(String[] args) throws IOException{
   MessengerA m = new MessengerA();
   m.process();
   
}
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호