본문 바로가기

자바, 파이썬

[자바, 파이썬] 서버 - 클라이언트 사용

자바

서버

 try{
	ServerSocket serversocket = new ServerSocket(8080);
    
	Socket socket = serversocket.accept();
            
	// 메시지 받기
	InputStream in = socket.getInputStream();
	DataInputStream dis = new DataInputStream(in);
            
	System.out.println("Received: " + dis.readUTF());
            
	dis.close();
	socket.close();
	serversocket.close();
}
catch(Exception e){
	e.printStackTrace();
}

클라이언트

try {
	Socket socket = new Socket("127.0.0.1", 8080);
            
	// 메시지 보내기
	OutputStream out = socket.getOutputStream();
	DataOutputStream dos = new DataOutputStream(out);
                            
	dos.writeUTF("Hello");
            
	dos.close();
	socket.close();
} 
catch(Exception e){
	e.printStackTrace();
}

파이썬

서버

import socket

# AF_INET: Address Family_IPv4
# SOCK_STREAM: 연결을 유지하는 스트림 소켓
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# SOL_SOCKET 레벨: 소켓 API레벨에서 소켓 옵션 조작
# SO_REUSEADDR: 주소 유효성 검사에 사용되는 규칙 - 주소 재사용 가능
# 1: 버퍼 포인터
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)

# 127.0.0.1: 자기 컴퓨터의 IPv4 IP주소, 8080: 자유로운 포트의 대표
server_socket.bind(("127.0.0.1",8080))

server_socket.listen()

client_socket, address = server_socket.accept()

print("Client address: ", address)

while True:
    data = client_socket.recv(1024) # recv(버퍼 크기)
    if not data:
        break
    print("Received data: ", data.decode())
    client_socket.sendall(data)

client_socket.close()
server_socket.close()

클라이언트

import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 127.0.0.1: 자기 컴퓨터의 IPv4 IP주소, 8080: 자유로운 포트의 대표
client_socket.connect(("127.0.0.1",8080))

client_socket.sendall("Hello".encode())

data = client_socket.recv(1024)
print("Received: ", data.decode())

client_socket.close()

cmd창 2개를 열어서 서버와 클라리언트를 실행시킬 수 있다.