자바 다 중 스 레 드 랜 채 팅 방 인 스 턴 스 생 성
한 학기 동안 자 바 를 공부 한 후에 자 바 는 정말 넓 고 심오 하 다 고 생각 했 습 니 다.c++때문에 자 바 를 경시 하 는 마음 을 철저히 포기 하고 다 중 스 레 드 채 팅 방 을 만들어 서버 와 클 라 이언 트 기기 의 조작 을 익 혔 습 니 다.
1.TCP
랜 연결 을 실현 하려 면 정보 전송 의 원 리 를 알 아야 한다.
랜 에서 전 송 된 정 보 는 모두 패키지 형식 입 니 다.제 가 사용 하 는 TCP 패키지 로 데 이 터 를 전송 하고 TCP 패키지 에 IP 메 시 지 를 봉 했 습 니 다.
다음은 정적 IPV 4 프로 토 콜 클래스 를 통 해 서버 의 IP 주 소 를 얻 는 것 입 니 다.
address = InetAddress.getByName("192.168.43.86");
2.소켓TCP 에서 서버 의 IP 주 소 를 받 았 으 나 IP 주소 만으로 구체 적 인 애플 리 케 이 션 을 잠 글 수 없어 소켓 이라는 개념 을 도입 했다.포트 번 호 는 호스트 의 프로 세 스 를 잠 그 는 데 사 용 됩 니 다.포트 번 호 는 보통 1024~49151 을 가 져 옵 니 다.0~1023 은 포트 번 호 를 잘 알 고 있 기 때문에 보통 HTTP 등 자주 사용 하 는 포트 에 사 용 됩 니 다.49152~65535 는 임시 포트 번호 이 고 무 작위 로 점용 할 수 없 으 며 프로그램 실행 과정 에서 임시 분 배 됩 니 다.
소켓=IP+포트 번호
이 말 은 포트 번호 9998 과 IP 를 192.168.43.86 으로 정의 하 는 소켓 이다.
int port = 9998;
socket = new Socket(address,port);
3.C/S 구조자바 류 의 측면 에서 볼 때 서버 와 클 라 이언 트 는 소켓 연결 을 통 해 연결 을 추상 화 했다.서버 는 자신의 소켓 포트 를 만 들 고 고객 이 이 포트 에 연결 되 어 있 는 지 감청 함으로써 정보의 읽 기 기능 을 실현 합 니 다.클 라 이언 트 는 서버 가 약속 한 포트 번 호 를 통 해 서버 에 데 이 터 를 전송 합 니 다.서버 가 켜 지면 클 라 이언 트 를 실행 하고 서버 와 세 번 악 수 를 하여 TCP 연결 을 한 다음 에 이 연결 을 바탕 으로 클 라 이언 트 와 서버 의 통신 을 실현 한다.
4.다 중 스 레 드
서버 가 여러 대상 을 동시에 서비스 할 수 있 기 때문에 전통 적 인 방법 으로 서버 연결 을 하면 여러 개의 클 라 이언 트 가 한 클 라 이언 트 와 서버 의 상호작용 을 기다 리 는 현상 이 나타 날 수 있다.이 문 제 를 해결 하기 위해 서 다 중 스 레 드 방법 을 채택 하 다.
슈퍼 소켓 클래스 로 socket 클래스 를 계승 하여 Runnable 인 터 페 이 스 를 실현 하여 다 중 스 레 드 운행 을 실현 합 니 다.
class SuperSocket extends Socket implements Runnable
SuperSocket socket_1 = new SuperSocket(9999);
SuperSocket socket_2 = new SuperSocket(9998);
SuperSocket socket_3 = new SuperSocket(9997);
Thread s1 = new Thread(socket_1);
Thread s2 = new Thread(socket_2);
Thread s3 = new Thread(socket_3);
5.서버서버 의 구조 세 번 째 부분 에서 보 듯 이 코드 는 다음 과 같다.
package TCP;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class TCPserver2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// socket
//
SuperSocket socket_1 = new SuperSocket(9996);
SuperSocket socket_2 = new SuperSocket(9998);
SuperSocket socket_3 = new SuperSocket(9997);
//
Thread s1 = new Thread(socket_1);
Thread s2 = new Thread(socket_2);
Thread s3 = new Thread(socket_3);
try {
while(true) {
//
s1.start();
s2.start();
s3.start();
if(scan.next()=="123"){
//
break;
}
}
} finally {
try {
//
socket_1.close();
socket_2.close();
socket_3.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class SuperSocket extends Socket implements Runnable{
InputStream is;
byte[] buffer;
Socket socket=null;
ServerSocket serverSocket=null;
public SuperSocket(int port){
try {
//
serverSocket = new ServerSocket(port);
buffer = new byte[1024];
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
try {
//
socket = serverSocket.accept();
//
is = socket.getInputStream();
//
int len = is.read(buffer);
String str = new String(buffer, 0, len);
System.out.println(str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
클 라 이언 트클 라 이언 트 의 구조 세 번 째 부분 에서 보 듯 이 코드 는 다음 과 같다.
package TCP;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class TCPclient {
public static void main(String[] args) {
InetAddress address=null;
Socket socket=null;
OutputStream os=null;
String message=null;
Scanner sca=null;
try {
// IP
address = InetAddress.getByName("192.168.43.86");
// ,
int port = 9998;
socket = new Socket(address,port);
//
os = socket.getOutputStream();
sca = new Scanner(System.in);
while(true) {
message = sca.next();
// ,
os.write(message.getBytes());
}
} catch (UnknownHostException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally {
try {
// , io
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
해결,매우 초라 하지만 랜 류 의 통신 도 실현 할 수 있 습 니 다.필요 하 다 면 서버 의 IP 주 소 를 바 꾸 세 요.IP 주 소 는 cmd 에서 ipconfig 명령 으로 볼 수 있 습 니 다.기말고사 가 끝나 면 GUI 를 더 해 알파 가지치기 알고리즘 을 가 진 AI 6 자 바둑 대결 에 추가 할 계획 이다.자바 가 다 중 스 레 드 랜 채 팅 방 을 만 드 는 인 스 턴 스 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 가 다 중 스 레 드 채 팅 방 을 만 드 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.