햄찌개

JAVA -TCP/IP 통신 1:1 본문

고급 JAVA

JAVA -TCP/IP 통신 1:1

햄찌개 2020. 10. 15. 15:08

Server에 Client가 연결되면 "어서오세요." 전송 예제

 

Server

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer {
	public static void main(String[] args) throws IOException {
		//Tcp소켓 통신을 하기 위한  ServerSocket객체 생성
		ServerSocket server = new ServerSocket(7777);// ~1024까지는 쓰면안됨.
		System.out.println("서버가 접속을 기다립니다....");
	
		//accept()메서드 Client에서 연결 요청이 올때까지 계속 기다린다.
		//연결 요청이 오면 Socket객체를 생성해서 Client의 Socket과 연결한다.
		Socket socket = server.accept();
		//-----------------------------------------------------------------------------------
		// 이 이후는 클라이언트와 연결된 후의 작업을 진행하면된다.
		System.out.println("접속한 클라이언트 정보");
		System.out.println("주소 : "+socket.getInetAddress());
	
		//Client의 메세지 보내기
		
		//OutputStream객체를 구성하여 전송한다.
		//접속한 Socket의 getOutputStream()메서드를 이용하여 구한다.
		OutputStream out = socket.getOutputStream();
		DataOutputStream dos = new DataOutputStream(out);
		dos.writeUTF("어서오세요....");//메세지 보내기
		System.out.println("메세지를 보냈습니다.");
		
		dos.close();
		server.close();
		
		
		
		
		
	}
}

Client

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

public class TcpClient {

	public static void main(String[] args) throws IOException {
		String serverIp = "192.168.45.25";
		//자기 자신 컴퓨터를 나타내는 방법 
		//Ip:127.0.0.1
		//컴 이름 : localhost
		
		System.out.println(serverIp+" 서버에 접속 중입니다...");
		
		//소켓 생성해서 서버에 연결을 요청한다.
		Socket socket = new Socket(serverIp,7777);
		
		//연결이 되면 이후의 명령이 실행된다.
		System.out.println("연결되었습니다.");
		
		//서버에서 보내온 메시지 받기
		//메시지를 받기 위해 InputStream객체를 생성한다.
		//Socket의 getInputStream()메서드 이용
		InputStream is = socket.getInputStream();
		DataInputStream dis = new DataInputStream(is);
		
		//서버로부터 받은 메시지 출력하기
		System.out.println("받은 메시지 : "+dis.readUTF());
		
		System.out.println("연결종료...");

		dis.close();
		socket.close();
		
		
	}

}

 


1대1 채팅

Server

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer2 {

	public static void main(String[] args) throws IOException {

		ServerSocket server = new ServerSocket(7777);
		System.out.println("서버 준비완료 ....");
		
		Socket socket =server.accept();//클라이언트와 통신이 될때까지 대기
		
		System.out.println(socket.toString());
		
		Sender sender = new Sender(socket);
		Receiver receiver = new Receiver(socket);
		
		sender.start();
		receiver.start();
		
	}

}

Client

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class TcpClient2 {

	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket socket = new Socket("localhost",7777);
		System.out.println("서버에 연결되었습니다...");
		System.out.println(socket);
		
		Sender sender = new Sender(socket);
		Receiver receiver = new Receiver(socket);
		
		sender.start();
		receiver.start();
	}
}

 

 

Sender

import java.io.DataOutputStream;
import java.net.Socket;
import java.util.Scanner;

/**
 * 소켓을 통해서 메시지를 보내는 역할을 담당한다.
 */
public class Sender extends Thread {
	private Socket socket;
	DataOutputStream dos;
	private String name;

	public Sender(Socket socket) {
		this.socket = socket;

		name = "[" + socket.getInetAddress() + " : " + socket.getPort() + "]";

		try {
			dos = new DataOutputStream(socket.getOutputStream());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public void run() {
		Scanner scan = new Scanner(System.in);
		while (dos != null) {
			try {
				dos.writeUTF(name + " >>> " + scan.nextLine());
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		scan.close();
	}

}

 

Receiver

import java.io.DataInputStream;
import java.net.Socket;

/**
 * 이 클래스는 소켓에서 메시지를 받아서 화면에 출력하는 역할을 담당한다.
 * @author PC-17
 */
public class Receiver extends Thread {
	private Socket socket;
	private DataInputStream dis;
	
	public Receiver(Socket socket) {
		this.socket=socket;
		
		try {
			dis=new DataInputStream(socket.getInputStream());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Override
	public void run() {
		while (dis!=null) {
			try {
				System.out.println(dis.readUTF());
			} catch (Exception e) {
				e.printStackTrace();
			}
			
		}
		
	}
}

 

'고급 JAVA' 카테고리의 다른 글

JAVA UDP 통신  (0) 2020.10.15
JAVA- TCP/IP - 멀티 채팅 프로그램  (0) 2020.10.15
JAVA- javaNetWork  (0) 2020.10.13
JAVA - Log4j  (0) 2020.10.08
JAVA - Singleton  (0) 2020.10.08