네트워크 교재에 나와있는 코드를 실제로 실행해 보기로 했다.
사용 교재 : 컴퓨터 네트워킹 하향식 접근(7판)
서버 코드
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('',serverPort))
serverSocket.listen(1)
print('The Server is ready to receive')
while True:
connectionSocket, addr = serverSocket.accept()
sentence = connectionSocket.recv(1024).decode()
capitalizedSentence = sentence.upper()
connectionSocket.send(capitalizedSentence.encode())
connectionSocket.close()
클라이언트 코드
from socket import *
serverName = '서버컴퓨터의 ip주소'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))
sentence = input('Input lowercase sentence:')
clientSocket.send(sentence.encode())
modifiedSentence = clientSocket.recv(1024)
print('From Server:',modifiedSentence.decode())
clientSocket.close()
서버가 클라이언트 보다 먼저 실행되고 있어야 하므로 서버 파일을 실행한다.
프린트문까지 무난히 실행된 듯 보이나 10번째 줄에서 네임에러가 발생한다.
앗 ! vi 편집기를 이용했더니 serverSocket에서 r이 빠지는 오타를 내고 말았다.
수정해준다.
오타를 고치고 실행하니 서버가 잘 작동한다.
서버를 이 상태로 두고 새로운 터미널 창을 열어서 클라이언트를 실행해준다.
serverName ... 즉 서버와 클라이언트가 서로를 인식하고 연결하는데 문제가 있는 것 같다.
역시 컴퓨터 하나에서 서버 클라이언트를 다 돌리는 건 가상머신을 사용하지 않고서는 안되는가보다(당연한 ㅜ)
랩탑1의 전원을 켜준다...
cmd 창에서 서버 파일을 실행한다.
리시브 대기 상태로 두고 돌아와 랩탑2에서 클라이언트 코드를 실행한다.
hello 를 소문자로만 입력해주면
서버로부터 대문자로 바뀐 HELLO를 받아볼 수 있다.
참고로 클라이언트 코드의 serverName 부분에 서버 컴퓨터(랩탑1)의 ip 주소를 넣어주면 되는데
이는 cmd창에 ipconfig 명령어를 입력하여 알 수 있다.
랩탑1은 무선 랜을 이용중이기 때문에
IPv4의 주소를 serverName 부분에 넣어주면 된다.
여기서 문제 !
From Server : HELLO 라고 응답이 와야할 것 같은데
저 더러운 생김새는 뭐지...
( ? ' ? u?
괄호랑 따옴표는 그렇다쳐도 저 u 는 왜 뜬금없이 생겨난걸까? 하...
아무래도 python 2버전을 사용한 탓인것 같아서 버전을 조회해보니
으음... 2버전은 이제 지원을 종료한다고 했으니 3버전을 사용하도록 한다.
깔끔해졌다. 야호~
근데 2버전에서 쓰던 코드를 그대로 쓰면
raw_input에서 에러가 나는데 이를 그냥 input으로 바꿔주면 된다.
'게임 개발 > C++' 카테고리의 다른 글
C++ Vector 클래스 (0) | 2023.06.03 |
---|---|
OS 무관 채팅 프로그램 만들기 - 4 : C++로 TCP 채팅 프로그램 (0) | 2023.03.29 |
OS 무관 채팅 프로그램 만들기 - 2 : ChatGPT 이용한 서버-클라이언트 채팅 프로그램 짜기 (0) | 2023.03.22 |
OS 무관 채팅 프로그램 만들기 - 1 : 기획 (0) | 2023.03.20 |
맥북에서 C++ 개발을 할 때 무슨 툴을 사용해야할까? (0) | 2023.03.19 |