250x250
Notice
Recent Posts
Recent Comments
Link
멋쟁이v의 개발일지
소켓 통신(php - 파이썬) 본문
728x90
320x100
목차
1. 소켓 통신이란
2. php 소켓 서버
3. 파이썬 서버 대기
4. 통신 과정
1. 소켓 통신이란
소켓 통신은 네트워크에서 두 컴퓨터 간의 양방향(bi-directional) 연결을 가능하게 하는 기술입니다. 소켓은 일반적으로 IP 주소와 포트 번호의 조합으로 정의되며, 클라이언트와 서버 사이에 지속적인 연결을 제공합니다.
- 소켓 통신은 지속적인 "연결" 상태를 유지하며 양방향 데이터 전송이 가능합니다.
- 실시간 채팅 애플리케이션 등에서 사용자 간 실시간 상호작용을 위해서는 보통 WebSocket 같은 기술(소켓 기반)을 사용하게 됩니다.
1. 데이터 교환: 소켓을 사용하여 클라이언트와 서버 간에 데이터를 주고받을 수 있습니다. 이를 통해 애플리케이션은 실시간으로 정보를 공유하고, 파일 전송, 스트리밍 등 다양한 형태의 데이터 교환을 할 수 있습니다.
2. 네트워크 프로그래밍: 소켓은 네트워크 프로그래밍에서 중요한 도구입니다. TCP/IP 기반의 인터넷 프로토콜 스택과 함께 사용되어 웹 서버, 메일 서버, 채팅 애플리케이션 등 다양한 네트워크 응용프로그램을 개발할 수 있습니다.
3. 멀티플렉싱: 하나의 컴퓨터에서 여러 개의 소켓 연결을 관리할 수 있으며, 멀티스레드 또는 비동기 방식으로 동시에 여러 연결을 처리할 수 있습니다.
4. 표준화된 인터페이스: 소켓은 일반적으로 운영체제나 언어에서 제공하는 표준화된 인터페이스로 지원됩니다. 따라서 다양한 운영체제와 언어에서 동일한 방식으로 소켓 프로그래밍을 할 수 있으며, 호환성과 이식성이 높아집니다.
5. 보안과 암호화: 소켓은 SSL/TLS와 같은 보안 기능과 함께 사용될 수 있어 안전한 통신 환경을 구축할 수 있습니다.
6. 분산 시스템: 분산 시스템에서는 여러 컴퓨터 간에 소켓 통신을 사용하여 작업 로드 밸런싱, 병렬 처리 등의 작업들을 분산시킬 수 있습니다.
→ 소켓 통신은 네트워크 상에서 신뢰성 있는 데이터 전송 및 상호작용에 필수적인 요소입니다. 따라서 많은 응용 프로그램 및 시스템에서 소캣 통신 기능이 활용되고 있습니다.
2. php 소켓 서버
<?php
// get the q parameter from URL
$Data = $_REQUEST["req"];
$address = "127.0.0.1";
$port = 52000;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
$input = "<script>alert(\"Communication Error!!\")</script>";
} else {
}
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 1, 'usec' => 0));
$result = socket_connect($socket, $address, $port);
if ($result === false) {
} else {
}
socket_write($socket, $Data, strlen($Data));
$input = socket_read($socket, 8192) or die("Could not read from Socket\n");
socket_close($socket);
$hint = $input;
// Output "no suggestion" if no hint was found or output correct values
echo $hint;
?>
3. 파이썬 소켓 서버 대기
import socket
# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Bind the socket to a specific address and port
server_address = ('localhost', 52000)
sock.bind(server_address)
# Listen for incoming connections
sock.listen(1)
while True:
# Wait for a connection
print('Waiting for a connection...')
connection, client_address = sock.accept()
try:
print('Connection from', client_address)
# Receive the data in small chunks and retransmit it
while True:
data = connection.recv(16)
if data:
print('Received {!r}'.format(data))
# Send some data back to the client
response = 'Data received: {!r}'.format(data)
connection.sendall(response.encode())
else:
break
finally:
# Clean up the connection
connection.close()
4. php와 파이썬 소켓 통신 과정
PHP와 Python 간에 소켓 통신을 사용하여 데이터를 전송할 수 있습니다.
PHP
- 클라이언트 요청을 처리하며, 서버 소켓을 생성하여 요청이 발생하면 데이터를 전송한다.
파이썬
- socket 라이브러리를 사용하여 서버 소켓을 생성하고, IP 주소와 포트 번호로 바인드한 후에 클라이언트의 연결 요청을 기다립니다.
1. 웹에서 PHP 서버 소켓을 통해 데이터를 전송한다.
2. 그리고 요청 대기 상태에 있는 파이썬이 응답한다.
3. 파이썬에서 클라이언트의 메세지를 받아 처리하거나 응답한다.
728x90
320x100
Comments