본문 바로가기
솔루션모음/파워자바 프로그래밍

[파워자바] 25장 프로그래밍 솔루션 답지

by 이얏호이야호 2023. 2. 16.

1.

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import javax.swing.*;
class JEditorPaneFrame extends JFrame implements ActionListener{
	private JTextField text;
	private JEditorPane edPane;
	private JScrollPane scroll;
	public JEditorPaneFrame(){
		setTitle("JEditorPane");
		setSize(700,700);		
		edPane = new JEditorPane();
		scroll = new JScrollPane(edPane);
		text = new JTextField(20);
		text.addActionListener(this);
		add(text,BorderLayout.PAGE_END);
		add(scroll, BorderLayout.CENTER);
		setVisible(true);
	}

	public void actionPerformed(ActionEvent event){
		try{
			URL java = new URL(event.getActionCommand());
			edPane.setPage(java);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
public class JEditorPaneTest {
	public static void main(String[] args){
		JEditorPaneFrame ep = new JEditorPaneFrame();
	}
}

 

2.

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

public class Server {
	public void send()
	{
		PrintWriter out = null;
		try{
			ServerSocket ss=new ServerSocket(8000);
			Random R=new Random();
			while(true){
				Socket socket=ss.accept();
				out=new PrintWriter(socket.getOutputStream());
				int select=R.nextInt(9);
				String[] s={"시간은 금이다.",
						"지갑이 가벼우면 마음이 무겁다.",
						"내일 지구가 멸망해도 나는 한그루의 사과나무를 심겠다.",
						"성공은 1%의 영감과 99%의 노력으로 이루어진다.",
						"되는 놈은 되고, 안되는 놈은 안된다.",
						"시작이 반이다.",
						"안되면 되게하라.",
						"유레카!",
						"음
						"..."};
				
				out.println(s[select]);
				out.close();
			}
		}catch(IOException e){
			e.printStackTrace();
		}
	}
	public static void main(String[] args)
	{
		Server s=new Server();
		s.send();
	}
}
---------------------------------------------------------------------------------------------
import java.awt.BorderLayout;
import java.awt.event.*;
import java.io.*;
import java.net.*;

import javax.swing.*;

public class Client extends JFrame implements ActionListener{
	JTextArea t_a;
	String message;
	String texting;
	public void receive()
	{
		try{
			Socket socket=new Socket("127.0.0.1",8000);
			InputStreamReader sReader=new InputStreamReader(socket.getInputStream());
			BufferedReader reader=new BufferedReader(sReader);
			message=reader.readLine();
			reader.close();
		}catch(IOException e){
			e.printStackTrace();
		}
	}
	Client()
	{
		texting="";
		setTitle("클라이언트 테스트");
		setSize(300,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		t_a=new JTextArea(30,30);
		JButton b=new JButton("서버로부터 메시지 수신");
		add(t_a,BorderLayout.SOUTH);
		add(b,BorderLayout.NORTH);
		b.addActionListener(this);
		pack();
		setVisible(true);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		receive();
		texting+="\n"+message;
		t_a.setText("서버로부터 메시지: "+texting);
	}
	public static void main(String[]args)
	{
		Client client=new Client();
	}
}

TCP를 이용한 서버와 클라이언트 프로_그램이다. 서버는 클라이언트에서 정해준 포트번호로 접
속하여 지속적으로 문자열을 뿌려준다.

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

public class UDP_Server {
	public void send()
	{
		try{
			InetAddress address=InetAddress.getByName("127.0.0.1");
			Random R=new Random();
			while(true){
				DatagramSocket ss=new DatagramSocket();
				int select=R.nextInt(9);
				String[] s={"시간은 금이다.",
						"지갑이 가벼우면 마음이 무겁다.",
						"내일 지구가 멸망해도 나는 한그루의 사과나무를 심겠다.",
						"성공은 1%의 영감과 99%의 노력으로 이루어진다.",
						"되는 놈은 되고, 안되는 놈은 안된다.",
						"시작이 반이다.",
						"안되면 되게하라.",
						"유레카!",
						"음
						"..."};
				byte[] buf=s[select].getBytes();
				DatagramPacket packet=new DatagramPacket(buf,buf.length,address,5000);
				ss.send(packet);
				ss.close();
				System.out.println("packet="+packet);
			}
		}catch(IOException e){
			e.printStackTrace();
		}
	}
	public static void main(String[] args)
	{
		UDP_Server s=new UDP_Server();
		s.send();
	}
}
-------------------------------------------------------------------------------------------------
import java.awt.BorderLayout;
import java.awt.event.*;
import java.io.*;
import java.net.*;

import javax.swing.*;

public class UDP_Client extends JFrame implements ActionListener{
	JTextArea t_a;
	String message;
	String texting;
	public void receiver()
	{
		try{
			byte[] buf=new byte[256];
			DatagramSocket socket=new DatagramSocket(5000);
			DatagramPacket packet=new DatagramPacket(buf,buf.length);
			socket.receive(packet);
			System.out.println("client packet="+packet);
			message=new String(buf);
			socket.close();
		}catch(IOException e){
			e.printStackTrace();
		}
	}
	UDP_Client()
	{
		texting="";
		setTitle("UDP클라이언트 테스트");
		setSize(300,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		t_a=new JTextArea(30,30);
		JButton b=new JButton("서버로부터 메시지 수신");
		add(t_a,BorderLayout.SOUTH);
		add(b,BorderLayout.NORTH);
		b.addActionListener(this);
		pack();
		setVisible(true);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		receiver();
		texting+="\n"+message;
		t_a.setText("서버로부터 메시지: "+texting);
	}
	public static void main(String[]args)
	{
		UDP_Client client=new UDP_Client();
	}
}

3.

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class EchoServer {
	protected JTextField textField;
	protected JTextArea textArea;
	DatagramSocket socket;
	DatagramPacket packet;
	InetAddress address = null;
	final int myPort = 5000;
	final int otherPort = 6000;
	
	public EchoServer() throws IOException{
		MyFrame f = new MyFrame();
		address = InetAddress.getByName("127.0.0.1");
		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("RECIEVED : " + new String(buf) + "\n");
				byte[] buffer = buf;
				DatagramPacket packet1;
				packet1=new DatagramPacket(buffer,buffer.length, address, otherPort);
				socket.send(packet1);
				textArea.append("ECHO : "+new String(buf) + "\n");
			}catch(IOException ioException){
				ioException.printStackTrace();
			}
		}
	}
	class MyFrame extends JFrame implements ActionListener{
		public MyFrame(){
			super("EchoServer");
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			
			textField = new JTextField(30);
			textField.addActionListener(this);
			
			textArea = new JTextArea(10,30);
			textArea.setEditable(false);
			
			add(textField,BorderLayout.PAGE_END);
			add(textArea, BorderLayout.CENTER);
			pack();
			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("SENT : " + s + "\n");
			textField.selectAll();			textArea.setCaretPosition(textArea.getDocument().getLength());
			}
	}
	public static void main(String[] args) throws IOException{
		EchoServer m = new EchoServer();
		m.process();
	}
}


import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class EchoClient {
	protected JTextField textField;
	protected JTextArea textArea;
	DatagramSocket socket;
	DatagramPacket packet;
	InetAddress address = null;
	final int myPort = 6000;
	final int otherPort = 5000;	
	public EchoClient() throws IOException{
		MyFrame f = new MyFrame();
		address = InetAddress.getByName("127.0.0.1");
		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("RECIEVED : " + new String(buf) + "\n");
			}catch(IOException ioException){
				ioException.printStackTrace();
			}
		}
	}
	class MyFrame extends JFrame implements ActionListener{
		public MyFrame(){
			super("MessengerB");
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			
			textField = new JTextField(30);
			textField.addActionListener(this);
			
			textArea = new JTextArea(10,30);
			textArea.setEditable(false);
			
			add(textField,BorderLayout.PAGE_END);
			add(textArea, BorderLayout.CENTER);
			pack();
			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("SENT : " + s + "\n");
			textField.selectAll();
			textArea.setCaretPosition(textArea.getDocument().getLength());
			}
	}
	public static void main(String[] args) throws IOException{
		EchoClient m = new EchoClient();
		m.process();
	}
}

댓글