오늘은 소켓 통신에 대해 포스팅해보고자 한다. HTTP통신과 Socket통신의 차이점은 Client의 요청에 해당하는 Requst가 있을 때에만 서버에서 응답하여 해당 정보를 전송(Response)하는 단방향의 통신 방식이 HTTP통신인 반면, Socket통신은 서버와 클라이언트가 연결되어 양방향 통신을 할 수 있다는 특징이 있습니다.
UDP와 TCP 차이에 대해서는 UDP가 빠르고 TCP가 보안상 좋다는 것 밖에 모르고 설명할자신이 없으니 아래 포스팅을 참고하기 바란다.
[TCP/UDP] TCP와 UDP의 특징과 차이
오늘은 네트워크의 계층들 중 전송 계층에서 사용하는 프로토콜에 대해서 알아보려고 합니다. 전송계층은 송신자와 수신자를 연결하는 통신서비스를 제공하는 계층으로, 쉽게 말해 데이터의 전달을 담당합니다. 그리고 데이터를 보내기 위해 사용하는 프로토콜이 있는데, 그 프로콜들이 바로 오늘의 주인공 TCP와 UDP입니다. 원래 TCP와 UDP에 대한 글을 포스팅 할 생각은 1도 없었는데, UDP 채팅 서버를 구현해야하는 과제를 하는 과정에서 부족함을 느끼고 공부의 목적으로 포스팅을 결심했습니다. 많이들 알고 계실텐데 그래도 확실히 집고 넘어가…
우선 나는 tensorflow로 예측된 이미지를 송신하는 것을 목적으로 한다. 기존에 가졌던 생각으로는 서버가 자료를 제공하고 클라이언트가 쓴다는 생각이였는데 소켓 통신은 이게 조금 다른 느낌인거 같다. 서버에서 자료를 대기하고 있다가 클라이언트에서 받아오는 형식인 것 같다.
아래는 서버 수신 코드이다. listen을 실행하면 connect 될 때까지 대기상태가 된다.
import logging
from numpysocket import NumpySocket
import cv2
logger = logging.getLogger('OpenCV server')
logger.setLevel(logging.INFO)
s=NumpySocket()
s.bind(('localhost', 9999))
s.listen()
아래는 클라이언트의 연결 부분이다. 연결이 끝나면 서버와 클라이언트 각각 연결된 상태로 대기상태가 해제된다.
from numpysocket import NumpySocket
import cv2
import numpy as np
import tensorflow as tf
model=tf.keras.models.load_model('DeepVOG.h5')
cap = cv2.VideoCapture(0)
cap.set(3,320) #CV_CAP_PROP_FRAME_WIDTH
cap.set(4,240) #CV_CAP_PROP_FRAME_HEIGHT
s=NumpySocket()
s.connect(("localhost", 9999))
서버와 클라이언트가 연결된 상태에서 서버에서 아래 코드를 실행하게되면 자료 수신상태가 된다.
conn, addr = s.accept()
frame = conn.recv()
클라이언트가 서버에 자료를 송신하는 코드이다.
ret, frame = cap.read()
pred=model(frame[np.newaxis])
s.sendall(pred.numpy())
python socket이란? AF_INET, SOCK_STREAM 의미, 간단하게 텍스트 주고 받는 서버 만들기
python socket이란? Socket(소켓)이란 간단히 설명하면 네트워크에서 패킷을 주고 받을 때 각 end 단에서 application으로 넘어가기전에 받아는 버퍼와 같은 것이다. 서버의 경우 서버에 들어오기 전에 Load balancer가 소켓으로 동작한다고 볼 수 있다. 그리고 클라이언트 측에서는 웹브라우저에 들어가기전에 버퍼역할을 하는 것이 소켓이라고 할 수 있다. AF_INET, SOCK_STREAM 의미 AF_INET, SOCK_STREAM 는 socket을 설정할 때 특성 값이다. AF_INET 는 해당 소켓은 I…

NumpySocket/examples/OpenCV at main · sabjorn/NumpySocket
Send Numpy Arrays with TCP/IP Sockets. Contribute to sabjorn/NumpySocket development by creating an account on GitHub.
python socket(tcp, udp) 사용하기 - Coconut
이번에는 python에서 기본으로 제공하는 socket 모듈을 사용하는 방법을 다루겠습니다. socket 통신에는 tcp와 udp 두가지가 있습니다. 1. 먼저 tcp – sender # socket module import! import socket # socket create and connection sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((“123.123.123.123″, 9999)) # send msg test_msg = ”안녕하세요 상대…

파이썬 소켓 프로그래밍 - 1. 간단한 채팅 프로그램 구현(1)
작년에 컴퓨터 네트워크 강의시간에 파이썬 소켓 프로그래밍 강의를 받은 적이 있습니다. 간단한 웹 서버 구축과 채팅 프로그램 구축 둘 중 하나를 택하는 거였는데, 네트워크 개념을 다시 복습하는 겸해서 한번 글을 써보기로 했습니다. 정확히 아는 것은 아니라 틀린 정보가 있을 수도 있으니 감안해 주시고, 혹시라도 제가 잘못 알고 있는 사실이 있다면 지적해주세요. 이 포스트에선 소켓에 대한 간단한 설명만 하고 넘어가도록 하겠습니다. 1. 소켓(Socket) OSI 7계층, 혹은 5계층에 대해서 들어보신 적이 있을 겁니다. 제가 배울 때에는…