[Python] 13. 소켓 서버(socket server/client)
#정리
#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()