자바 소켓 - 클 라 이언 트 와 서버 의 교 류 를 실현 합 니 다.

자바 소켓 프로 그래 밍 은 자바 네트워크 프로 그래 밍 의 입문 지식 을 배 우 는 것 입 니 다. 가장 간단 한 예 는 클 라 이언 트 와 서버 의 통신 을 실현 하 는 것 입 니 다. 클 라 이언 트 에서 서버 로 메 시 지 를 보 낼 수 있 고 서버 에서 도 클 라 이언 트 에 게 메 시 지 를 피드백 할 수 있 습 니 다.다음은 관련 된 개념 을 간단하게 소개 한다.
소켓: 소켓 은 서로 다른 응용 프로그램 프로 세 스 와 연결 을 구별 하기 위해 컴퓨터 운영 체제 가 TCP / IP 프로 토 콜 에 제공 하 는 인터페이스 입 니 다.
1) 소켓 은 IP 주소 와 포트 번호 로 구성 되 어 있 습 니 다. 간단하게 설명 하 겠 습 니 다. 컴퓨터 에 두 개의 프로그램 이 실행 되 고 있 고 모두 서버 에서 데 이 터 를 읽 습 니 다. 하 나 는 A 이 고 하 나 는 B 입 니 다. 현재 A 의 서버 와 B 의 서버 가 동시에 데 이 터 를 보 내 왔 다 고 가정 하면 받 은 네트워크 데 이 터 는 어느 프로그램 에 사용 되 는 지 어떻게 판단 합 니까?이것 이 바로 포트 의 역할 이다!모든 프로그램 이 이 컴퓨터 의 포트 를 감청 하면 이 포트 에서 데 이 터 를 읽 을 수 있 습 니 다!이렇게 하면 데이터 가 혼 란 스 럽 지 않 아 요.
2) 네트워크 흐름: 네트워크 에서 전송 되 는 데이터 흐름;
 
다음은 프로그램 코드 입 니 다. (주: 코드 에는 데이터베이스 작업 JDBC 와 다 중 스 레 드 (스 레 드 풀 작업) 가 포함 되 어 있 습 니 다.
 
클 라 이언 트:
 
import javax.swing.*;
import java.awt.*;   
import java.net.Socket;
import java.sql.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.sql.*;
       
public class test extends JFrame {
    private DataOutputStream toServer;
    private DataInputStream fromServer;
    private Socket socket;
    
    public test(){
	//    
	setLayout(new FlowLayout());
	JLabel label = new JLabel("   ID:");
	
	final JTextField id = new JTextField(10);
	JButton button = new JButton("search");
	add(label);
	add(id);
	add(button);
	
	JLabel labela = new JLabel("   Employee ID:    ");
	final JTextField text1 = new JTextField(20);
	add(labela);
	add(text1);
	
	JLabel labelb = new JLabel("    Last Name:     ");
	final JTextField text2 = new JTextField(20);
	add(labelb);
	add(text2);
	
	JLabel labelc = new JLabel("    First Name:      ");
	final JTextField text3 = new JTextField(20);
	add(labelc);
	add(text3);

	JLabel labeli= new JLabel("        Address:      ");
	final JTextField text4 = new JTextField(20);
	add(labeli);
	add(text4);
	
	JButton but = new JButton("Insert");
	add(but);
	
	
	//  :     
	try{
	    socket = new Socket("localhost", 8000);
	}catch(IOException e){}
	
	
//                     ,          ,         ;
	but.addActionListener(new ActionListener(){
	    public void actionPerformed(ActionEvent e){
		String access = "insert|" + text2.getText() + "|" + text3.getText() + "|" + text4.getText();
		try {
		    PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
		    pw.write(access);
		    pw.flush();
		} catch (IOException e1) {
		    // TODO Auto-generated catch block
		    e1.printStackTrace();
		}
	    }
	});

//         ,    getInputStream()           ,         
	button.addActionListener(new ActionListener(){
	    public void actionPerformed(ActionEvent e){
		try{
		    //    ;
		    InputStreamReader isr;//                ;
		    //isr = new InputStreamReader(socket.getInputStream());
		    //BufferedReader br = new BufferedReader(isr);
		    PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
		    pw.write("search|" + id.getText()); 
		    pw.flush();
		    
		    char buf[] = new char[200];
			
			//   
		    for(int i = 0; i < 100; i++){
			buf[i] = '0';
		    }
		
		    isr = new InputStreamReader(socket.getInputStream());
		    isr.read(buf);
		    String result = arrayOp(buf);
		    //     ;
		    String re[] = result.split("\\|");
		    
		    //      
		    text1.setText(id.getText());
		    text2.setText(re[0]);
		    text3.setText(re[1]);
		    text4.setText(re[2]);
		}catch(IOException ex){};
		    		
	    }
	});  
	}
    //        (       Java         )
    public String arrayOp(char buf[]){
	    String result = "";
	    
	    for(int i = 0; i < buf.length; i++){
		if(buf[i] == '0')
		    break;
		result = result + buf[i];		    
	    }
	    return result;
	}
    
//   
    public static void main(String args[]){
	JFrame frame = new test();
	frame.setTitle("     ");
	frame.setLocationRelativeTo(null);
	frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
	frame.setSize(350, 220);
	frame.setVisible(true);	
    }  
}

 
서버 쪽:
import java.awt.BorderLayout;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Server extends JFrame{

    /**
     * @param args
     */
    private JTextArea jta = new JTextArea();
    private DataInputStream input;
    private DataOutputStream output;
    private Socket socket;
//   
    private ExecutorService executor = Executors.newFixedThreadPool(3);
    String result = "";
    
//   !
    public static void main(String[] args) throws IOException {
	// TODO Auto-generated method stub
	Server server = new Server();
	server.listen();
    }
    
    public Server(){
	setLayout(new BorderLayout());
	add(new JScrollPane(jta), BorderLayout.CENTER);
	
	setTitle("Server");
	setSize(500, 300);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setVisible(true);
    }
    
    public void listen() throws IOException{
	 //create a server socket
//           ,  IP ~~
	    ServerSocket serverSocket = new ServerSocket(8000);
	    jta.append("~~~             ~~~
"); while(true){ socket = serverSocket.accept(); // , Runnable task = new Mc(); executor.execute(task); } } private class Mc implements Runnable{ public Mc(){ } public void run(){ try{ String dbUrl = "jdbc:odbc:jdbc"; String user = ""; String password = ""; // ; InputStreamReader isr; isr = new InputStreamReader(socket.getInputStream()); //BufferedReader br = new BufferedReader(isr); ///PrintWriter pw = new PrintWriter(socket.getOutputStream(),true); char buf[] = new char[200]; // for(int i = 0; i < 200; i++){ buf[i] = '0'; } while(true){ isr.read(buf); String operation = arrayOp(buf); // !! String arrayStr[] = operation.split("\\|"); // ; try{ try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }catch(ClassNotFoundException ep){ System.out.println(ep.toString()); } Connection c = DriverManager.getConnection(dbUrl, user, password); Statement s = c.createStatement(); // ; if(arrayStr[0].equals("search")){ jta.append(" ID :" + arrayStr[1] + "
"); jta.append(" ····
"); ResultSet r = s.executeQuery( "SELECT FirstName, LastName, Address " + "FROM Employees " + "WHERE " + "(EmployeeID=" + arrayStr[1] + ") "); while(r.next()) { result = r.getString("LastName") + "|" + r.getString("FirstName") + "|" + r.getString("Address"); } PrintWriter pw = new PrintWriter(socket.getOutputStream(), true); pw.write(result); pw.flush(); jta.append(" ,

"); c.close(); } else if(arrayStr[0].equals("insert")){ jta.append(" ····
"); jta.append("LastName :" + arrayStr[1] + "
"); jta.append("FirstName :" + arrayStr[2] + "
"); jta.append("Address :" + arrayStr[3] + "
"); for(int i = 0; i < 200; i++){ buf[i] = '0'; } String access = "INSERT INTO Employees(LastName, FirstName, Address) VALUES('" + arrayStr[1]+"','" + arrayStr[2] +"','" + arrayStr[3] +"')"; s.executeQuery(access); c.close(); jta.append(" ^_^

"); } s.close(); // Also closes ResultSet*/ }catch(SQLException ex){ System.out.println(ex.toString()); }///////// } }catch(IOException ep){} } public String arrayOp(char buf[]){ String result = ""; for(int i = 0; i < buf.length; i++){ if(buf[i] == '0') break; result = result + buf[i]; } return result; } } }
 좋 습 니 다. 위의 예 는 자바 의 스 레 드, 네트워크, 데이터 베 이 스 를 모두 보 여 줍 니 다 ~ ~ ~ 하지만 컴퓨터 에서 보 여 드릴 수 없습니다. 데이터 베 이 스 를 해 야 하기 때문에 데이터 베 이 스 를 삭제 하거나 고 칠 수 있 습 니 다. 그러면 OK 입 니 다 ~

좋은 웹페이지 즐겨찾기