네트워크 프로그래밍 과제 중 에러가 생겨 약 1시간 넘게 구글링 + 코드수정을 진행했다.
하지만 에러의 원인은 변수명을 잘못썼기 때문이였음ㅋ
과제는 서버 코드 , 클라이언트 코드를 각각 작성해서 클라이언트 쪽에서 내 이름을 서버로 보내면, 서버에서 그걸 받아서 출력해주는 아주 간단한(?) 과제였다.
서버랑 클라이언트 코드를 짠 후 클라이언트에서 내 이름을 보내면 서버에서 받지못하고 자꾸 에러를 냈다.
OSError : [WinError 10057] 소켓이 연결되어 있지 않거나 Sendto 호출을 사용하여 데이터 그램 소켓에 보내는 경우에 주소가 제공되지 않아서 데이터를 보내거나 받도록 요청할 수 없습니다.
에러의 내용 + 구글링의 결과 서버와 클라이언트 사이의 연결에 문제가 있는 것 같았다.
stackoverflow.com/questions/28877472/python-socket-winerror-10057
원인은 알겠지만 어디서 문제가 일어났는지 도통 감을 잡을 수 없었다@@
변수 이름이 중복된걸까? 아니면 recv() 안의 파라미터값을 바꿔야하는건가?..bind의 주소값을 잘못한건지..
코드를 이리저리 바꿔보다가 문제점을 찾아냈다.
바로 내가 잘못 알고 있었던 것 !
서버에서는 소켓이 두 개가 생기는데
1. 클라이언트와 '연결'을 해주기 위한 서버쪽 소켓
2. 클라이언트에 연결, 접속할 수 있는 소켓
1번의 경우는 코드상에서 변수 s에 해당한다.
s는 딱 while 반복문 위에까지만 등장하는데, s가 바로 클라이언트와 연결해주기 위한 서버쪽의 소켓이다.
2번은 while 문 안에서 쓰이는 client 변수이다.
코드에서 보면 client는 s.accept()의 return 값을 받는데 이것이 이후 클라이언트와 통신하기 위해 사용되는 소켓이다.
따라서 while문 안에서는 s로 접근하는 것이 아니고 client 변수로 접근을 해야했던 것
수업시간에 별표도 쳐놓고 잊어버린 나란 사람..^^
'Study > Python' 카테고리의 다른 글
[VSCODE/Jupyter Notebook] 주피터 노트북 셀 언어가 CVE로 뜨는 경우 해결 방법 (2) | 2022.01.28 |
---|---|
[Python/파이썬] 프로세스(Process)와 쓰레드(Thread) (3) | 2021.10.11 |
[Python/파이썬] lambda와 sort 정리 (0) | 2021.03.23 |
[Django/Python] (진행중) 점프 투 장고 2-1. 주소와 화면을 연결하는 URL과 뷰 (1) | 2021.03.22 |
[Python/파이썬] 파이썬 입력받는 방법 with input()과 sys.stdin.readline() (0) | 2021.03.09 |