서버 부분
쓰레드 파트
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.List;
public class ServerThread extends Thread {
Socket socket;
List<Socket> list;
public ServerThread(Socket socket, List<Socket> list) {
this.socket = socket;
this.list = list;
}
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
// 1. recv
try {
while (true) {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str = reader.readLine();
System.out.println("클라이언트로 부터 받은 메시지 " + str);
// 2. send
for(Socket sock : list) {
//담당자 소켓
//본인을 제외하고 받고싶을때
if(socket != sock) {
PrintWriter writer = new PrintWriter(sock.getOutputStream());
writer.println(str); // 실질적으로 전송
writer.flush(); // 중요 끝맺음
}
}
Thread.sleep(300);
}
} catch (InterruptedException e) {
e.printStackTrace();
}catch (Exception e) {
// e.printStackTrace();
System.out.println("연결이 끊긴 IP: " + socket.getInetAddress());
list.remove(socket);
// 남은 클라이언트 확인
for (Socket s : list) {
System.out.println("접속 되어있는 IP:" + s.getInetAddress()
+ " Port: "+ s.getPort());
}
try {
socket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
메인 파트
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class mainClass {
public static void main(String[] args) {
Socket clientSocket = null;
try {
// 문지기 소켓
ServerSocket serverSocket = new ServerSocket(9000);
// 자동으로 자신의 IP를 설정, binding, listen 포함
List<Socket> list = new ArrayList<Socket>();
while (true) {
System.out.println("접속 대기중...");
clientSocket = serverSocket.accept();
list.add(clientSocket);
// 담당자 소켓
// 어떤 클라이언트의 IP
System.out.println("client IP:" + clientSocket.getInetAddress() + "Port:" + clientSocket.getPort());
// 1. recv
// 문지기 소켓이 아니다
BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
new ServerThread(clientSocket, list).start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
클라이언트 부분
쓰레드 읽기
package main;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
public class ReadThread extends Thread {
// 클라이언트단은 받기만 하면 된다.
Socket socket;
public ReadThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
super.run();
while (true) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str = reader.readLine();
System.out.println("서버로 부터 받은 메시지 " + str);
Thread.sleep(300);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
메인 파트
package main;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.Scanner;
public class mainClass {
public static void main(String[] args) {
/*
* 1. 접속을 해야할 Server IP(주소)를 설정 -Socket 2. Socket 생성 3. 접속 connect
*
* 4. packet 전송
*/
InetSocketAddress sockAddr = new InetSocketAddress("192.168.2.5", 9000);
// InetSocketAddress sockAddr = new InetSocketAddress("192.168.2.31", 9000);
// InetSocketAddress sockAddr = new InetSocketAddress("192.168.2.40", 9000);
// InetSocketAddress sockAddr = new InetSocketAddress("127.0.0.1", 9000);
// 클라이언트의 소켓은 하나만 있으면된다
Socket socket = new Socket();
Scanner scanner = new Scanner(System.in);
// Server 접속
try {
socket.connect(sockAddr, 10000);
//float k = 3.14f;
// double num = 3.14;
// byte su1 = 126;
// byte su2 = -12;
// (byte) res = su1 + sue2;
InetAddress inetAddr;
if ((inetAddr = socket.getInetAddress()) != null) {
System.out.println("서버 연결 성공 : " + inetAddr);
} else {
System.out.println("서버 연결 실패");
}
new ReadThread(socket).start();
while(true) {
System.out.println("전송 문자열");
String str = scanner.next();
//1. send
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.println(str); //실질적으로 전송
writer.flush(); // 중요 끝맺음
//2. recv
// 받는건 언젠지 모른다.
// 대기 상태로 유지시키기
// BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//
// str = reader.readLine();
// System.out.println("서버로 부터 받은 메시지 " + str);
//
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
'Java > java 기초' 카테고리의 다른 글
자바 JFRAME + JDBC + OracleDB를 활용한 카페 주문 시스템 구현하기 (3) | 2019.12.31 |
---|---|
쓰레드를 활용한 오브젝트 전송하기 (0) | 2019.12.10 |
awt 로 채팅 프로그램 구현하기 (0) | 2019.12.10 |
네트워크 공부 (0) | 2019.12.09 |
awt - 이미지 올리기 (0) | 2019.12.06 |