JAVA 는 Tcp 프로 토 콜 기반 의 간단 한 Socket 통신 인 스 턴 스 를 실현 합 니 다.
오늘 은 Socket 통신 에 대한 간단 한 응용,Socket 이 무엇 인지,그리고 일부 네트워크 프로 그래 밍 의 기초 에 대해 서 는 언급 하지 않 고 가장 간단 하고 실 용적 인 것 만 기록 합 니 다.
1.먼저 TCP 프로 토 콜 Socket 서버 와 클 라 이언 트 를 기반 으로 하 는 통신 모델 을 살 펴 보 겠 습 니 다.
Socket 통신 절차:(간단하게 4 단계 로 나 뉜 다)
1.서버 서버 소켓 과 클 라 이언 트 소켓 만 들 기
2.Socket 에 연 결 된 출력 입력 흐름 열기
3.협의 에 따라 읽 기와 쓰기 작업 을 한다.
4.해당 자원 닫 기
2.연 결 된 API:
1.먼저 ServerSocket 을 살 펴 보 자.
클래스 ServerSocket
서버 소켓 을 실현 합 니 다.서버 소켓 이 네트워크 를 통 해 들 어 오 기 를 기다 리 고 있 습 니 다.이 요청 을 바탕 으로 일부 작업 을 수행 한 후 요청 자 에 게 결 과 를 되 돌려 줄 수 있 습 니 다.
서버 소켓 의 실제 작업 은 SocketImpl 류 의 인 스 턴 스 로 실 행 됩 니 다.응용 프로그램 은 소켓 을 만 드 는 소켓 공장 을 변경 하여 자신 을 설정 하여 로 컬 방화벽 에 맞 는 소켓 을 만 들 수 있 습 니 다.
몇 가지 중요 한 방법:(구체 적 으로 공식 api 를 보십시오)
ServerSocket(int port, int backlog)
지정 한 backlog 를 이용 하여 서버 소켓 을 만 들 고 지정 한 로 컬 포트 번호 에 연결 합 니 다.
bind(SocketAddress endpoint, int backlog)
ServerSocket 을 특정 주소(IP 주소 와 포트 번호)에 연결 합 니 다.
accept()
이 소켓 의 연결 을 수사 하고 받 아들 입 니 다.
getInetAddress()
이 서버 소켓 의 로 컬 주 소 를 되 돌려 줍 니 다.
close()
이 소켓 을 닫 습 니 다.2.Socket 다시 보기
클래스 소켓
이러한 클 라 이언 트 소켓 을 실현 합 니 다.소켓 은 두 기계 간 통신 의 단점 이다.
소켓 의 실제 작업 은 SocketImpl 류 의 인 스 턴 스 로 실 행 됩 니 다.응용 프로그램 은 소켓 을 만 드 는 소켓 공장 을 변경 함으로써 로 컬 방화벽 에 맞 는 소켓 을 만 들 수 있 습 니 다.
몇 가지 중요 한 방법:(구체 적 으로 공식 api 를 보십시오)
Socket(InetAddress address, int port)
스 트림 소켓 을 만 들 고 지정 한 IP 주소 의 지정 한 포트 번호 에 연결 합 니 다.
getInetAddress()
소켓 연결 주 소 를 되 돌려 줍 니 다.
shutdownInput()
이 소켓 의 입력 흐름 은'흐름 의 끝'에 있 습 니 다.
shutdownOutput()
이 소켓 의 출력 흐름 을 사용 하지 않 습 니 다.
close()
이 소켓 을 닫 습 니 다.3.코드 구현:
서버 서버.자바
1.ServerSocket 대상 을 만 들 고 포트 를 연결 하고 감청 합 니 다.
2.accept 를 통 해 클 라 이언 트 의 요청 을 감청 합 니 다.
3.연결 을 만 든 후 출력 입력 흐름 을 통 해 읽 기와 쓰기 동작
4.관련 자원 닫 기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
/**
* Socket
*/
public static void main(String[] args) {
try {
ServerSocket serverSocket=new ServerSocket(8888);
System.out.println(" , ..");
Socket socket=serverSocket.accept();// , Socket
//
InputStream inputStream=socket.getInputStream();// ,
InputStreamReader inputStreamReader=new InputStreamReader(inputStream);// ,
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);//
String temp=null;
String info="";
while((temp=bufferedReader.readLine())!=null){
info+=temp;
System.out.println(" ");
System.out.println(" :"+info+", ip :"+socket.getInetAddress().getHostAddress());
}
OutputStream outputStream=socket.getOutputStream();// ,
PrintWriter printWriter=new PrintWriter(outputStream);//
printWriter.print(" , ");
printWriter.flush();
socket.shutdownOutput();//
//
printWriter.close();
outputStream.close();
bufferedReader.close();
inputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
클 라 이언 트 Client.java1.Socket 대상 을 만 들 고 서버 의 주소 와 포트 번 호 를 지정 합 니 다.
2.연결 을 만 든 후 출력 입력 흐름 을 통 해 읽 기와 쓰기 동작
3.출력 입력 흐름 을 통 해 서버 반환 정보 가 져 오기
4.관련 자원 닫 기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
/**
* Socket
*/
public static void main(String[] args) {
try {
// Socket
Socket socket=new Socket("localhost",8888);
//
OutputStream outputStream=socket.getOutputStream();// ,
PrintWriter printWriter=new PrintWriter(outputStream);//
printWriter.print(" , Balla_ ");
printWriter.flush();
socket.shutdownOutput();//
InputStream inputStream=socket.getInputStream();// ,
InputStreamReader inputStreamReader=new InputStreamReader(inputStream);// ,
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);//
String info="";
String temp=null;//
while((temp=bufferedReader.readLine())!=null){
info+=temp;
System.out.println(" :"+info);
}
//
bufferedReader.close();
inputStream.close();
printWriter.close();
outputStream.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
4.효과 캡 처:서버:
클 라 이언 트:
상기 코드 는 단일 클 라 이언 트 와 서버 의 연결 을 실현 합 니 다.다 중 클 라 이언 트 작업 을 실현 하려 면 다 중 스 레 드 와 관련 되 어야 합 니 다.받 은 Socket 대상 을 따로 스 레 드 작업 을 한 다음 에 순환 while(true)로 포트 를 감청 하면 됩 니 다.이 쪽 은 코드 에 직접 주 십시오.
스 레 드 작업 클래스:SocketThread.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
/**
* Socket ( Socket )
*/
public class SocketThread extends Thread {
private Socket socket;
public SocketThread(Socket socket) {
this.socket = socket;
}
public void run() {
//
try {
InputStream inputStream = socket.getInputStream();
// ,
InputStreamReader inputStreamReader = new InputStreamReader(
inputStream);// ,
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);//
String temp = null;
String info = "";
while ((temp = bufferedReader.readLine()) != null) {
info += temp;
System.out.println(" ");
System.out.println(" :" + info + ", ip :"
+ socket.getInetAddress().getHostAddress());
}
OutputStream outputStream = socket.getOutputStream();// ,
PrintWriter printWriter = new PrintWriter(outputStream);//
printWriter.print(" , ");
printWriter.flush();
socket.shutdownOutput();//
//
bufferedReader.close();
inputStream.close();
printWriter.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
서버 클래스:Server.java
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
/**
* Socket
*/
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println(" , ..");
while (true) {
Socket socket = serverSocket.accept();// , Socket
SocketThread socketThread = new SocketThread(socket);
socketThread.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
클 라 이언 트 클래스:Client.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
/**
* Socket
*/
public static void main(String[] args) {
try {
// Socket
Socket socket=new Socket("localhost",8888);
//
OutputStream outputStream=socket.getOutputStream();// ,
PrintWriter printWriter=new PrintWriter(outputStream);//
printWriter.print(" , 1");
printWriter.flush();
socket.shutdownOutput();//
InputStream inputStream=socket.getInputStream();// ,
InputStreamReader inputStreamReader=new InputStreamReader(inputStream);// ,
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);//
String info="";
String temp=null;//
while((temp=bufferedReader.readLine())!=null){
info+=temp;
System.out.println(" :"+info);
}
//
bufferedReader.close();
inputStream.close();
printWriter.close();
outputStream.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
효과 구현 도 보기:여 기 는 벽돌 을 던 져 옥 을 끌 어 올 리 는 것 일 뿐 실제 개발 에서 Socket 프로 그래 밍 을 바탕 으로 일반적으로 전달 하 는 것 은 문자열 이 아니 라 대상 이 많은 경우 에 우 리 는 Object OutputStream 을 사용 하여 출력 흐름 대상 을 직렬 화 할 수 있다.
예 를 들 면:
OutputStream outputStream = socket.getOutputStream();
ObjectOutputStream objectOutputStream=new ObjectOutputStream(outputStream);
User user=new User("admin","123456");
objectOutputStream.writeObject(user);
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.