자바 소켓 - 클 라 이언 트 와 서버 의 교 류 를 실현 합 니 다.
10467 단어 자바응용 서버socketSQL Server네트워크 응용
소켓: 소켓 은 서로 다른 응용 프로그램 프로 세 스 와 연결 을 구별 하기 위해 컴퓨터 운영 체제 가 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 입 니 다 ~이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.