Python

[Python] 13. 소켓 서버(socket server/client)

걍작 2022. 4. 10. 01:52

#정리

#37socket -  소켓 서버 

#import sys
#from socket import *
#from select import select

<서버 - 클라이언트 공통사항>
#소켓 서버 준비 (host,port,buffer size set)

 - HOST = 'ip address' #ip address
 - PORT = 56783 #port #클라이언트 측과 동일 포트 사용필요
 - BUFSIZE = 1024 #buffer size
 - ADDR = (HOST,PORT)

#소캣 객체 생성

 - serverSocket = socket(AF_INET,SOCK_STREAM) #소캣 객체 생성(socket object create)

<서버만 작성>

#서버 정보 바인딩 및 요청 대기 (socket object create)

 - serverSocket.bind(ADDR) #서버 정보 바인딩(server Info Binding)
 - serverSocket.listen(10) #listener (요청 대기)
 - connection_list = [serverSocket]
#채팅 정보 입출력 실행

 - 키보드 인터럽트 예외 처리를 통해 종료 명령 실행
 - 메시지 받기 >> 보내기 순서 중요

 - accept() 함수로 요청 대기 

#38socket -client-  소켓 클라이언트

#import sys
#from socket import *
#from select import select

<서버 - 클라이언트 공통사항>
#소켓 서버 준비 (host,port,buffer size set)

 - HOST = 'ip address' #ip address
 - PORT = 56783 #port #클라이언트 측과 동일 포트 사용필요
 - BUFSIZE = 1024 #buffer size
 - ADDR = (HOST,PORT)

#소캣 객체 생성

 - serverSocket = socket(AF_INET,SOCK_STREAM) #소캣 객체 생성(socket object create)

<클라이언트만 작성>

#connect (연결(접속) 시도) 및 연결 예외 처리

 - 키보드 인터럽트 예외 처리를 통해 종료 명령 실행
 - 메시지 보내기 >> 받기 순서 중요

 - connect()로 연결시도.

 

 

 

#37socket -  소켓 서버 

#import sys
#from socket import *
#from select import select

<서버 - 클라이언트 공통사항>
#소켓 서버 준비 (host,port,buffer size set)

 - HOST = 'ip address' #ip address
 - PORT = 56783 #port #클라이언트 측과 동일 포트 사용필요
 - BUFSIZE = 1024 #buffer size
 - ADDR = (HOST,PORT)

#소캣 객체 생성

 - serverSocket = socket(AF_INET,SOCK_STREAM) #소캣 객체 생성(socket object create)

<서버만 작성>

#서버 정보 바인딩 및 요청 대기 (socket object create)

 - serverSocket.bind(ADDR) #서버 정보 바인딩(server Info Binding)
 - serverSocket.listen(10) #listener (요청 대기)
 - connection_list = [serverSocket]
#채팅 정보 입출력 실행

 - 키보드 인터럽트 예외 처리를 통해 종료 명령 실행
 - 메시지 받기 >> 보내기 순서 중요

 - accept() 함수로 요청 대기 

더보기
#채팅 정보 입출력
try: 
	clientSocket, addr_info = serverSocket.accept()
	print("clientSocket",clientSocket)
	print("connection_list",connection_list)
	
	#null 이 아니므로 무한 루프
	while connection_list:
    #메시지 받기 >> 보내기 순서 중요
    	#메시지 받기
		data = clientSocket.recv(BUFSIZE)
		print(data.decode("utf-8"))
		
        #메시지 보내기
		print("send Message:")
		message = sys.stdin.readline() #사용자 입력 내용 확인
		clientSocket.send(message.encode())
	
#Ctrl + c 로 종료시 익셉션 종료 가능.	
except KeyboardInterrupt as e:
	print("KeyboardInterrupt...")
	serverSocket.close()
	sys.exit()

 

--예문 코드 보기--

더보기
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from socket import *
from select import select

print("hello serverSocket...")
#server socket
#host,port,buffer size set
print("---------------")
HOST = 'ip address' #ip address
PORT = 56783 #port
BUFSIZE = 1024 #buffer size
ADDR = (HOST,PORT)

#소캣 객체 생성(socket object create)
serverSocket = socket(AF_INET,SOCK_STREAM)
#서버 정보 바인딩(server Info Binding)
serverSocket.bind(ADDR)
#listener (요청 대기)
serverSocket.listen(10)
connection_list = [serverSocket]
######## 여기까지 작성하면, 채팅 서버 시작 #########
print("---------------")
print("채팅 서버를 시작합니다...")
print("---------------")

#채팅 정보 입출력
try: 
	clientSocket, addr_info = serverSocket.accept()
	print("clientSocket",clientSocket)
	print("connection_list",connection_list)
	
	#null 이 아니므로 무한 루프
	while connection_list:
		data = clientSocket.recv(BUFSIZE)
		print(data.decode("utf-8"))
		
		print("send Message:")
		message = sys.stdin.readline() #사용자 입력 내용 확인
		clientSocket.send(message.encode())
	
#Ctrl + c 로 종료시 익셉션 종료 가능.	
except KeyboardInterrupt as e:
	print("KeyboardInterrupt...")
	serverSocket.close()
	sys.exit()


#ps axu | grep socket
#kill -9 (idNum - 3353)

 


#38socket -client-  소켓 클라이언트

#import sys
#from socket import *
#from select import select

<서버 - 클라이언트 공통사항>
#소켓 서버 준비 (host,port,buffer size set)

 - HOST = 'ip address' #ip address
 - PORT = 56783 #port #클라이언트 측과 동일 포트 사용필요
 - BUFSIZE = 1024 #buffer size
 - ADDR = (HOST,PORT)

#소캣 객체 생성

 - serverSocket = socket(AF_INET,SOCK_STREAM) #소캣 객체 생성(socket object create)

<클라이언트만 작성>

#connect (연결(접속) 시도) 및 연결 예외 처리

 - 키보드 인터럽트 예외 처리를 통해 종료 명령 실행
 - 메시지 보내기 >> 받기 순서 중요

 - connect()로 연결시도.

#connect (연결(접속) 시도) 및 연결 예외 처리
try:
	clientSocket.connect(ADDR) #연결 시도
	print("connect successed...") 
	
	while True:		
		#보내기
		print("send Message:")
		message = sys.stdin.readline() #사용자 입력 내용 저장
		clientSocket.send(message.encode()) #서버로 입력 내용 전달
		
		#받기
		data = clientSocket.recv(BUFSIZE) #버퍼사이즈에 맞춰 메시지 수령
		print(data.decode("utf-8")) #서버 응답 데이터 utf-8 형식으로 데이터 변환
		
except Exception as e:
	print("Not connected...")
	clientSocket.close()
	sys.exit()

 

 

 

--예문 코드 보기--

더보기
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from socket import *
from select import select

print("hello serverSocket...")
#client socket
#host,port,buffer size set
print("---------------")
HOST = '192.168.43.128' #ip address
PORT = 56784 #port
BUFSIZE = 1024 #buffer size
ADDR = (HOST,PORT)

#socket object create
clientSocket = socket(AF_INET,SOCK_STREAM)

#connect (연결(접속) 시도) 및 연결 예외 처리
try:
	clientSocket.connect(ADDR)
	print("connect successed...")
	
	while True:		
		#보내기
		print("send Message:")
		message = sys.stdin.readline()
		clientSocket.send(message.encode())
		
		#받기
		data = clientSocket.recv(BUFSIZE)
		print(data.decode("utf-8"))
		
		#print() 함수 외에 입력 받는 법
		#sys.stdout.write("me:") #버퍼 비우기랑 같이 써야함
		#sys.stdout.flush() #버퍼비우기
		
except Exception as e:
	print("Not connected...")
	clientSocket.close()
	sys.exit()