본문 바로가기
게임 개발/C++

OS 무관 채팅 프로그램 만들기 - 3 : Python TCP 코드로 서버-클라이언트 프로그램 실행 연습하기

네트워크 교재에 나와있는 코드를 실제로 실행해 보기로 했다.

사용 교재 : 컴퓨터 네트워킹 하향식 접근(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으로 바꿔주면 된다.