보통 서버와 클라이언트는 TCP/IP 통신을 한다.
네트워킹을 통한 통신에는 InputStream,OutputStream 통해 자료 송신과 수신을 한다.
1)서버 소켓을 생성하고 ,응답 대기 한다.
3)응답 대기를 하던 서버는 접속 요청 클라이언트마다 신규 소켓을 생성한다.
4)데이터 송신과 수신을 쓰레드를 사용하여 동시에 한다.
5)통신이 종료되면 소켓을 종료한다.
서버
package com.java.socket03_tcp.basic;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class BasicServer {
public static void main(String[] args){
BufferedWriter bw;
PrintWriter pw=null;
OutputStream os;
ServerSocket serverSocket; //서버 소켓 클래스 객체
Socket s1=null;
InetAddress ipAddrs=null;
String connectedClient=null;
String outMessage=null;
try{
serverSocket= new ServerSocket(5434);
System.out.println("서버 실행 중... ");
while(true){
//클라이언트의 접속을 인지 시에 accept()메소드를 호출해서 소켓 객체를 생성한다.
//클라이어트가 특정 포트로 접속을 시도하면 accept메소드는 대기를 풀고 클라이언트와 연결시키는 Socket 클래스를 생성하여 반환
s1= serverSocket.accept();
os = s1.getOutputStream();//클라이언트랑 연결된 소켓으로 부터 OutputStream 객체를 가져온다.
ipAddrs=s1.getInetAddress();
connectedClient=ipAddrs.toString();//클라이언트의 ip주소를 얻어온다.
bw = new BufferedWriter(new OutputStreamWriter(os));//바이트 출력 스트림에 연결되어 문자 출력 스트림인 Writer로 변환시키는 보조 스트림.
pw=new PrintWriter(bw,true);
pw.println(connectedClient+" 에서 서버에 접속하셨습니다.");
pw.close();
s1.close();
}
}catch(IOException ie){
ie.printStackTrace();
}
}
}
클라이언트
package com.java.socket03_tcp.basic;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class BasicClient {
public static void main(String[] args) {
InputStream is;
BufferedReader br;
String message=null;
try{
Socket s1=new Socket("127.0.0.1",5434);
is=s1.getInputStream();
br = new BufferedReader(new InputStreamReader(is)); //서버의 바이트 스트림을 문자로 변환한다.
message=br.readLine(); //버퍼에 있는 문자를 한줄씩 출력
System.out.println(message);
s1.close();
}catch(Exception e){
e.printStackTrace();
}
}
}