Java-socket
ServerSocket server=new ServerSocket(6789);
여기 서 주의해 야 할 것 은 포트 의 분배 가 유일 해 야 한 다 는 것 입 니 다.포트 는 모든 컴퓨터 의 유일한 서 비 스 를 표시 하기 위 한 것 이기 때 문 입 니 다.또한 포트 번 호 는 0~65535 사이 이 고 앞의 1024 개의 포트 는 Tcp/Ip 에 의 해 보존 포트 로 되 어 있 습 니 다.따라서 당신 이 할당 한 포트 는 1024 개 이후 에 만 있 을 수 있 습 니 다.자,우 리 는 고정 적 인 위치 가 있 습 니 다.지금 필요 한 것 은 하나의 연결선 입 니 다.이 연결선 은 고객 측 이 먼저 요구 합 니 다.따라서 자바 역시 하나의 Socket 대상 을 제공 하여 지원 합 니 다.고객 측 이 Socket 의 인 스 턴 스 대상 을 만 들 기만 하면 됩 니 다.
Socket client=new Socket(InetAddress.getLocalHost(),5678);
클 라 이언 트 는 서버 와 관련 된 IP 주 소 를 알 아야 합 니 다.자바 에 대해 서도 InetAddress 와 관련 된 인 스 턴 스 를 제공 합 니 다.이 대상 의 인 스 턴 스 는 정적 인 방법 으로 제공 해 야 합 니 다.정적 인 방법 은 주로 이 컴퓨터 의 IP 와 이름 이나 IP 를 통 해 InetAddress 를 직접 얻 는 방법 을 제공 합 니 다.자,위의 방법 은 기본적으로 하나의 연결선 을 만들어 두 컴퓨터 가 서로 교차 하도록 할 수 있 습 니 다.흐 르 고 있 습 니 다.그런데 데 이 터 는 어떻게 전송 되 나 요?사실 I/O 작업 은 항상 네트워크 프로 그래 밍 과 밀접 한 관 계 를 가진다.바 텀 네트워크 는 데 이 터 를 계속 하기 때문이다.원 격 호출 을 하지 않 는 한 문 제 를 처리 하 는 핵심 은 실행 되 고 있다.그렇지 않 으 면 데이터 의 상호작용 은 IO 작업 에 의존 하기 때문에 자바.io 라 는 가방 을 가 져 와 야 한다.자바 의 IO 작업 도 복잡 하지 않다.바이트 흐름 과 유 니 코드 에 대한 독자 와 작성 자 를 제공한다.그리고 데이터 읽 기와 쓰기 에 사용 할 버퍼 도 제공 합 니 다.
BufferedReader in=
new BufferedReader(new InputStreamReader(server.getInputStream()));
PrintWriter out=new PrintWriter(server.getOutputStream());
위의 두 문장 은 버퍼 를 만 들 고 원본 바이트 흐름 을 유 니 코드 로 바 꾸 는 것 입 니 다.원본 바이트 흐름 은 Socket 의 두 가지 방법 에서 유래 합 니 다.getInputStream()과 getOutputStream()측.각각 입력 과 출력 을 얻 을 수 있 습 니 다.그러면 현재 기본 적 인 모델 과 기본 적 인 조작 도구 가 있 습 니 다.우 리 는 간단 한 Socket 루틴 을 만 들 수 있 습 니 다.서비스 측:
import java.io.*;
import java.net.*;
public class Myserver {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8800);//
Socket client = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(client
.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream());
while (true) {
String str = in.readLine();
System.out.println(str);// ,
out.println("has receive....");//
out.flush();
if (str.equals("end"))
break;
}
client.close();
}
}
이 프로그램의 주요 목적 은 서버 가 클 라 이언 트 가 기록 한 정 보 를 계속 받 는 것 입 니 다.클 라 이언 트 가"End"문자열 을 보 내 면 프로그램 을 종료 합 니 다.또한 서버 도"Receive"를 응답 합 니 다.클 라 이언 트 가 메 시 지 를 받 았 음 을 알려 줍 니 다.클 라 이언 트 코드:
import java.net.*;
import java.io.*;
public class Myclient {
static Socket server;
public static void main(String[] args) throws Exception {
server = new Socket(InetAddress.getLocalHost(), 8800);// , IP
BufferedReader in = new BufferedReader(new InputStreamReader(server
.getInputStream()));
PrintWriter out = new PrintWriter(server.getOutputStream());
BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String str = wt.readLine();
out.println(str);//
out.flush();
if (str.equals("end")) {
break;
}
System.out.println(in.readLine());// ,
}
server.close();
}
}
클 라 이언 트 코드 는 클 라 이언 트 키보드 의 입력 을 받 고 이 정 보 를 출력 한 다음 에'End'를 출력 하여 종료 표 지 를 하 는 것 입 니 다.이 프로그램 은 간단 한 두 컴퓨터 간 의 통신 일 뿐 입 니 다.여러 클 라 이언 트 가 동시에 서버 를 방문 한다 면?클 라 이언 트 를 다시 실행 해 보 세 요.결 과 는 이상 합 니 다.그러면 여러 클 라 이언 트 는 어떻게 실현 합 니까?사실 간단하게 분석 해 보면,이 를 통 해 알 수 있 듯 이 고객 과 서비스 통신 의 주요 채널 은 바로 Socket 자체 이다.서버 는 accept 방법 을 통 해 고객 과 통신 하 는 것 에 동의 하 는 것 이다.그러면 고객 이 Socket 을 구축 하 는 동시에 서버 도 이 연결선 을 사용 하여 선후 로 통신 할 것 이다.그러면 우리 가 여러 개의 연결선 만 존재 하면 된다.그러면 우리 의 프로그램 은 다음 과 같이 변 할 수 있다.서버:
import java.io.*;
import java.net.*;
public class MyServer {
public static void main(String[] args) throws IOException{
ServerSocket server=new ServerSocket(5678);
while(true){
Socket client=server.accept();
BufferedReader in=
new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream());
while(true){
String str=in.readLine();
System.out.println(str);
out.println("has receive....");
out.flush();
if(str.equals("end"))
break;
}
client.close();
}
}
}
여 기 는 단지 하나의 외부 While 순환 을 추가 한 것 입 니 다.이 순환 의 목적 은 한 고객 이 들 어 오 면 이 고객 이 서버 와 의 상호작용 을 완성 할 때 까지 Socket 을 분배 하 는 것 입 니 다.여 기 는 바로 고객 의'End'메 시 지 를 받 아들 이 는 것 입 니 다.그러면 지금 은 여러 고객 간 의 상호작용 을 실현 할 수 있 습 니 다.그러나 문제 가 또 생 겼 습 니 다.이렇게 하면 여러 고객 을 해 결 했 지만,그러나 줄 을 서서 실 행 했 습 니 다.즉,한 고객 과 서버 가 한 번 의 통신 을 마 친 후에 야 다음 고객 이 들 어 와 서 서버 와 상호작용 을 할 수 있 습 니 다.동시에 서 비 스 를 할 수 없습니다.그러면 어떻게 해 야 서로 교류 할 수 있 고 동시에 교류 할 수 있 습 니까?이것 은 병렬 실행 문제 임 이 분명 합 니 다.따라서 스 레 드 가 가장 좋 은 해결 방안 입 니 다.그러면 다음 문 제 는 스 레 드 를 어떻게 사용 하 느 냐 하 는 것 입 니 다.먼저 해 야 할 일 은 스 레 드 를 만 들 고 네트워크 와 연결 할 수 있 도록 하 는 것 입 니 다.그 다음 에 스 레 드 를 만 들 거나 Thread 를 직접 계승 하거나 Runnable 인 터 페 이 스 를 실현 하 는 것 입 니 다.Socket 과 의 관 계 를 맺 으 려 면 인용 만 전달 하면 됩 니 다.스 레 드 를 실행 하려 면 run 방법 을 다시 써 야 합 니 다.run 방법 이 한 일 은 방금 단일 스 레 드 버 전 main 이 한 일 입 니 다.그래서 우리 프로그램 은 이렇게 되 었 습 니 다.
import java.net.*;
import java.io.*;
public class MultiUser extends Thread{
private Socket client;
public MultiUser(Socket c){
this.client=c;
}
public void run(){
try{
BufferedReader in=
new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream());
//Mutil User but can't parallel
while(true){
String str=in.readLine();
System.out.println(str);
out.println("has receive....");
out.flush();
if(str.equals("end"))
break;
}
client.close();
}catch(IOException ex){
}finally{
}
}
public static void main(String[] args)throws IOException{
ServerSocket server=new ServerSocket(5678);
while(true){
//transfer location change Single User or Multi User
MultiUser mu=new MultiUser(server.accept());
mu.start();
}
}
}
제 클래스 는 Thread 클래스 에서 직접 계승 되 었 습 니 다.또한 구조 함수 전달 인용 을 통 해 클 라 이언 트 Socket 과 관 계 를 맺 었 습 니 다.그러면 모든 스 레 드 가 있 습 니 다.하나의 통신 파이프 도 있 습 니 다.마찬가지 로 우 리 는 run 방법 을 작성 할 수 있 습 니 다.이전의 작업 을 스 레 드 에 맡 겨 완성 할 수 있 습 니 다.이렇게 많은 고객 이 병행 하 는 Socket 이 만 들 어 졌 습 니 다.
===============총괄========================
1.Eclipse 환경 에서 단일 컴퓨터 에서 자바 Socket 프로그램 을 디 버 깅 할 수 있 습 니 다.
2.디 버 깅 할 때 먼저 서버 엔 드 프로그램 MyServer.자바 를 실행 한 다음 에 클 라 이언 트 프로그램 MyClient.자바 프로그램 을 실행 합 니 다.
3.프로그램의 5678 은 포트 번호 입 니 다.포트 가 점용 되면"Unrecognized Windows Sockets error:0:JVM"이 나타 납 니 다.이상해결 방법 은 포트 번 호 를 수정 하 는 것 이다.주의해 야 할 것 은 포트 번 호 를 수정 하려 면 서버 단말기 클 라 이언 트 프로그램의 포트 번 호 를 일치 하 게 수정 해 야 한 다 는 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.