2015년 10월 21일 수요일

150925 -windows programing -스윙SWING 네트워크

150925 -windows programing -스윙SWING 네트워크


windows programming
윈도우 프로그래밍


5.SWING

MVC (Model View Controller) 패턴



네트워크 

ip, port, socket, protocol

서버 < - > 클라이언트

도메인 : 하나의 서버의 역할이 정해져있고, 여러 클라이언트 가 네트워크를 구성함

p2p : 서로 동등한 관계로, 서버가될수도 있고 클라이언트가 될수도있다.

protocol : 통신규약
http, ftp, tcp/ip, ipx/spx, 


TCP : 연결지향성

UDP : 비 연결지향성

IP & Port : IP 는 주소 Port 는 동 호수  ex) 2호선 을지로입구역 (IP) 35번 코인락커 (Port) 

Socket : IP + Port + Data transfer 


1. InetAddress

2.URL URLConnection (Uniformed Resource )

서버용 프로그램과 클라이언트용 프로그램 2개를 만들어야함

서버는 그냥잇고, 클라이언트의 요청이 없으면 서비스를 해주지 않음

클라이언트가 서버에 서비스요청을 하는것을 리퀘스트 라고 함

서버가 준비가되어야하며, 소켓을 만들어야 한다.

서버용프로그램은  포트번호를 정해놓고 요청을 기다려야한다.


서버는 소켓을 만들어야한다. 사용자가 들어올 수 있도록, 준비를 해줘야 하기 때문에, 이것을 맞이용 소켓이라고 하고, 이것을 서버용 프로그램이라고 말한다.

클라이언트 프로그램은 임의의 포트번호로 정해놓는다.

소켓을 쓸 수 잇게 만든다.

원하는 서버에 접속을 요청한다.

클라이언트 프로그램이 자기의  ip주소와 포트번호를 알려주면 서버프로그램이 그것을 받아서 ip 와 포트번호를 맞춘다.

서버 주 소켓프로그램은 항상 손님을 받아야 하기 때문에, 데이터용 소켓프로그램으로 넘긴다.

그래서 다시 손님을 받을준비를 해야한다.

서버 는 주소켓 / 데이터용 소켓 두가지 ( 최소 두개이상 )

크기를 알수없음 - 배열ㄴㄴ 컬렉션ㅇㅇ




====================================================================


SwingTest5
====================================================================
package Swing;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableModel;

public class SwingTest5 extends JFrame implements ActionListener {

JTable table;
JButton btn;
JScrollPane scroll;
String[] title = { "이름", "나이", "성별" };
Object data[][] = { { "홍길동", 24, "남" }, { "유관순", 22, "여" }, { "강감찬", 25, "남" }, { "이순신", 27, "남" },
{ "이해청", 25, "남" } };

SwingTest5() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
table = new JTable(data, title);
scroll = new JScrollPane(table);
btn = new JButton("출력");

add("Center", scroll);
add("South", btn);

btn.addActionListener(this);

}

public static void main(String[] args) {
// TODO Auto-generated method stub
SwingTest5 test = new SwingTest5();
test.setSize(300, 400);
test.setVisible(true);

}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
TableModel model = table.getModel();
for (int i = 0; i < model.getColumnCount(); i++) {
System.out.print(model.getColumnName(i) + "\t");}
System.out.print("\n**************************\n");
for (int i = 0; i < model.getRowCount(); i++) {
//sSystem.out.print(model.getColumnName(i) + "\t");
for (int j = 0; j < model.getColumnCount(); j++) {
System.out.print(model.getValueAt(i, j) + "\t");
}System.out.println();
}

}

}



====================================================================
SwingTest6
====================================================================
package Swing;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

public class SwingTest6 extends JFrame implements ActionListener {

JTable table;
JButton btnAdd, btnDel;
JScrollPane scroll;
String[] title = { "이름", "나이", "성별" };
JTextField tName, tAge, tGender;
JPanel panel;
ImageIcon icon1, icon2, icon3, icon4;

SwingTest6() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

DefaultTableModel model = new DefaultTableModel(title, 0);
table = new JTable(model);
scroll = new JScrollPane(table);
btnAdd = new JButton("add");
btnDel = new JButton("del");
tName = new JTextField("name", 6);
tAge = new JTextField("age", 3);
tGender = new JTextField("gender", 2);
panel = new JPanel();

icon1 = new ImageIcon(getClass().getResource("/resource/6.png"));
icon2 = new ImageIcon(getClass().getResource("/resource/8.png"));
icon3 = new ImageIcon(getClass().getResource("/resource/7.png"));
icon4 = new ImageIcon(getClass().getResource("/resource/5.png"));
btnAdd.setIcon(icon1);
btnAdd.setPressedIcon(icon2);
btnDel.setIcon(icon3);
btnDel.setPressedIcon(icon4);
add(btnAdd);add(btnDel);
add("Center", scroll);

panel.add(tName);
panel.add(tAge);
panel.add(tGender);
panel.add(btnAdd);
panel.add(btnDel);
add("South", panel);

btnAdd.addActionListener(this);
btnDel.addActionListener(this);
}


@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("add")) {
String[] data = new String[3];
data[0] = tName.getText();
data[1] = tAge.getText();
data[2] = tAge.getText();

DefaultTableModel model = (DefaultTableModel) table.getModel();
model.addRow(data);
}
if (e.getActionCommand().equals("del")) {
int idx = table.getSelectedRow();
if(idx == -1){
JOptionPane.showMessageDialog(null, "You must be choosed '행'");
return;
}
DefaultTableModel model = (DefaultTableModel)table.getModel();
model.removeRow(idx);
}

}

public static void main(String[] args) {
// TODO Auto-generated method stub
SwingTest6 test = new SwingTest6();
test.pack();
test.setVisible(true);

}
}




******************************************************************************
Network
====================================================================
******************************************************************************



====================================================================
InetAddressTest
====================================================================
package Network;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class InetAddressTest {

public static void main(String[] args) throws UnknownHostException {

// String name = args[0];

// System.out.println(InetAddress.getByName(name).getHostAddress());

// InetAddress[] ia = InetAddress.getAllByName(name);
// for(int i=0;i<ia.length;i++){
// System.out.println(ia[i].getHostAddress()); }

// System.out.println(InetAddress.getLocalHost().getHostAddress());

//System.out.println(InetAddress.getLoopbackAddress().getHostAddress());
}


}




====================================================================
TcpClient
====================================================================
package Network;

import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class TcpClient1 {
private static Socket client;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("접속할 서버 주소 : ");
String serverUrl = scan.next();
try{
client = new Socket(serverUrl, 9999);
/*
InputStream istream = client.getInputStream();
DataInputStream distream = new DataInputStream(istream);
System.out.println(distream.readUTF());
istream.close();
distream.close();
*/
OutputStream ostream = client.getOutputStream();
DataOutputStream dostream = new DataOutputStream(ostream);
System.out.print("서버에 하고 싶은 말 : ");
String reply = scan.next();
dostream.writeUTF(reply);
ostream.close();
dostream.close();
client.close();
}
catch(Exception err){}
}
}




====================================================================
TcpServer
====================================================================
package Network;

import java.io.DataInputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer1 {
private ServerSocket server;
private Socket client;
private final int PORT = 9999;
public TcpServer1() {
try{
server = new ServerSocket(PORT);
while(true){
client = server.accept();
System.out.println(client.getInetAddress() + "가 접속했습니다. : " + client.getPort());
InputStream istream = client.getInputStream();
DataInputStream distream = new DataInputStream(istream);
System.out.println(distream.readUTF());
istream.close();
distream.close();
/*
OutputStream ostream = client.getOutputStream();
DataOutputStream dostream = new DataOutputStream(ostream);
dostream.writeUTF(client.getInetAddress() + 
"님 접속을 환영합니다.");
ostream.close();
dostream.close();
*/
}
}
catch(Exception err){
System.out.println("서버 소켓 생성 실패 : " + err);
}
}
public static void main(String[] args) {
new TcpServer1();
}
}






====================================================================
UdpServer
====================================================================
package Network;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.util.Random;

class Fortune {
private static final String[] today = { "주방에가면 김샐수", " 기차보면 기찰수", "학교가면 종칠수", "강보면 물만날수", " 병원가면 피볼수",
" 게임방가면 게임끝날수", "0자보면꽁짜얻을수", "당구장가면 공칠수", "대머리보면 빛볼수", "도박하면 패가망신할수"

};

public static String choice() {
int num = new Random().nextInt(10);
return today[num];
}
}

public class UdpServer {

DatagramSocket socket;
private final int PORT = 10000;
DatagramPacket packet;

UdpServer() {

try {
socket = new DatagramSocket(PORT);
while (true) {

byte[] buf = new byte[512];
packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);

String reply = Fortune.choice();
buf = reply.getBytes();
packet = new DatagramPacket(buf, buf.length, packet.getAddress(), packet.getPort());
socket.send(packet);

}
catch (SocketException e) {
System.out.println("서버소켓 실패 : ");

} catch (IOException e) {
e.printStackTrace();
}

}

public static void main(String[] args) {
// TODO Auto-generated method stub
new UdpServer();
}

}





====================================================================
UdpClient
====================================================================
package Network;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

import javax.lang.model.element.PackageElement;

public class UdpClient {
private DatagramSocket socket;
private DatagramPacket packet;
private static String serverIp = "127.0.0.1";

public static void main(String[] args) {
UdpClient client = new UdpClient();
try {
client.socket = new DatagramSocket();

byte[] buf = new byte[512];
InetAddress addr = InetAddress.getByName(serverIp); // 아이피 어드레스를
// 보낼수가 없어서 문자열로
// 출력이 불가능하므로
// 아이넷 어드레스 변형해서
// 적어야한다.
client.packet = new DatagramPacket(buf, buf.length, addr, 10000); // 패킷을
// 보내기위한
// 용도는
// 인자수가
// 4개이다.
client.socket.send(client.packet);

client.packet = new DatagramPacket(buf, buf.length);
client.socket.receive(client.packet);
System.out.println("오늘의 운세 :" + new String(client.packet.getData()));
}

catch (Exception err) {
err.printStackTrace();
}

}

}







====================================================================
URLTest
====================================================================
package Network;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Scanner;

public class URLTest {

public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
System.out.println("접속할 url 입력 : ");
String strUrl = scan.next();
URL myUrl = new URL (strUrl);
BufferedReader br = 
new BufferedReader(
new InputStreamReader(myUrl.openStream()));
/*
String data = br.readLine();
while(data != null){
System.out.println(data);
data = br.readLine();
*/
String data;
while((data = br.readLine())!= null){
System.out.println(data);
}
/* 프로토콜명 :// 호스트명 : 포트번호 / 파일명#섹션명
 * 
 * 80 이 포트번호 기본  - 기본값으로 설정되있다면 생략가능.
 */
}
}

댓글 없음:

댓글 쓰기