Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 잠실새내
- apollo react native
- graphql mutation error
- 비동기배열
- 화이트해커를 위한 웹 해킹의 기술
- 홍대 예술
- apolloclient
- 도그존
- 비동기배열처리방법
- 신촌 소문난집
- promise처리
- 홍대 토라비
- graphql
- 예쁜술집 예술
- 홍대 카페 장쌤
- graphql with reactnative
- 고르드
- 지보싶 신촌점
- graphql react native
- 앙버터마카롱
- 화이트 해커를 위한 웹 해킹의 기술
- graphql 400
- 잠실새내 도그존
- 토라비
- typescript
- promise메서드
- useMutation error
- 금별맥주
- 운정 소바동
- graphql with RN
Archives
- Today
- Total
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
Python을 이용한 소켓 프로그래밍 (에코 서버,클라이언트 구현) 본문
Python에서 소켓을 사용하려면 socket을 import 해야함
Client 소켓 구현
import socket
#1번째 방법
with socket.socket() as s: #close를 해주지 않아도 자동으로 닫음
addr=("www.daum.net",80) #도메인 주소, 포트, 443web
s.connect(addr) #통신 시작
s.send("GET \n".encode()) #GET 메서드, 네트워크로 데이터를 보내려면 encoding을 해주어야함
data=s.recv(1024) #데이터 1024byte만큼 받기
print(data.decode())
#2번째 방법 s=socket.socket() s.close를 해주어야함
GET 메서드를 encoding해서 서버에게 리소스를 요청하고
서버로부터 응답을 받아 decoding 후 출력한 결과이다.
Server 소켓 구현
import socket
with socket.socket() as s:
addr = ("0.0.0.0",70)#80: port, 0.0.0.0: ip주소, 모든 ip주소를 받음
s.bind(addr) #소켓 바인딩
s.listen() #client 연결 요청 대기
print("start server...")#서버 개통 완료시 출력
conn, addr=s.accept()#2개의 결과를 반환, 연결수락
#conn: s객체 대신 쓰일 객체, 데이터 송수신에 사용, 1:1통신
#addr: 클라이언트 주소
print("accept {}:{}".format(addr[0],addr[1]))#연결된 clnt주소 출력
소켓을 이용해 서버를 개통한 후 "start server..."를 출력한다.
클라이언트 요청을 대기하다가 클라이언트가 연결되면 연결된 클라이언트의 주소를 출력한다.
에코 클라이언트, 서버 구현
: 클라이언트가 입력한 문자열을 서버가 받아 다시 클라이언트에게 전송
=> 즉 내용이 변하지 않고 입력한 문자가 그대로 출력된다.
#echo_server.py
import socket
addr=("0.0.0.0",4444) #포트번호 4444
with socket.socket() as s: #소켓 할당
s.bind(addr) #소켓 바인딩
s.listen() #client의 연결요청 대기
print("Server is started...")
#------------------------------------서버 개통과정--------------
conn,addr = s.accept() #client 연경 요청을 수락
print("accept {}:{}".format(addr[0],addr[1])) #연결된 client 정보 출력
while(1): #무한반복
data=conn.recv(1024) #client가 보낸 메시지를 data에 저장
if(data.decode()=="finished"): #data decoding 결과가 finished면
break #반복문 탈출
conn.send(data) #data를 그대로 client에게 전송
print(data.decode()) #보낸 데이터 읽기
print("Server finished") #서버 종료 알리기
#echo_clnt.py
import socket
addr=("127.0.0.1",4444)
with socket.socket() as s: #소켓 생성
s.connect(addr) #소켓 연결 요청
while(1): #무한 반복
str1=input("echo: ") #사용자에게 입력받음
if(str1=="finised"): #finished가 입력되면
s.send(str1.encode()) #메시지 encoding해서 전송
s.close() #소켓 닫음
s.send(str1.encode()) #메시지 encoding 후 전송
data=s.recv(1024) #server로부터 받은 메시지 data에 저장
print(data.decode()) #data decoding후 출력
print("program finish")
실행화면
해결 못한 문제점: 서버의 소켓은 잘 닫히는데, client의 소켓은 닫히지 않는다....
'개발 > Python' 카테고리의 다른 글
윈도우 키로거 (0) | 2020.11.15 |
---|---|
Unix 패스워드 트래커 (0) | 2020.11.15 |
포트 스캐너 (스레드, Nmap, optparse) (0) | 2020.10.11 |
python을 이용한 백도어 개발 (0) | 2020.09.28 |
HTTP 요청 메시지, Fuzzing (0) | 2020.09.21 |
Comments