15
6. 소켓 프로그래밍과 스레드: 채팅 프로그래밍 채팅 프로그래밍 순천향대학교 컴퓨터공학과 순천향대학교 컴퓨터공학과 이상정 순천향대학교 컴퓨터공학과 1 GUI 설계기법 학습 내용 학습 내용 인터넷 구조 인터넷 구조 인터넷 구성 요소 인터넷 주소 클라이언트/서버 구조 소켓 프로그래밍 소개 파이썬 소켓 프로그래밍 TCP 클라이언트/서버 프로그래밍 스레 소개 스레소개 파이썬 스레드 채팅 클라이언트/서버 프로그램 채팅 클라이언트/서버 프로그램 6. 소켓 프로그래밍과 스레드 순천향대학교 컴퓨터공학과 2

6. 소켓프로그래밍과스레드: 채팅프로그래밍cs.sch.ac.kr/lecture/Python/2015/15-6-PythonGUI-socket.pdf · GUI 설계기법 네트워크요소 네트워크가장자리(edge)

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 6. 소켓프로그래밍과스레드: 채팅프로그래밍cs.sch.ac.kr/lecture/Python/2015/15-6-PythonGUI-socket.pdf · GUI 설계기법 네트워크요소 네트워크가장자리(edge)

6. 소켓 프로그래밍과 스레드: 채팅 프로그래밍채팅 프로그래밍

순천향대학교 컴퓨터공학과순천향대학교 컴퓨터공학과

이 상 정

순천향대학교 컴퓨터공학과 1

GUI 설계기법

학습 내용학습 내용

인터넷 구조 인터넷 구조• 인터넷 구성 요소

• 인터넷 주소

• 클라이언트/서버 구조

소켓 프로그래밍 소개• 파이썬 소켓 프로그래밍

• TCP 클라이언트/서버 프로그래밍

스레 소개 스레드 소개• 파이썬 스레드

• 채팅 클라이언트/서버 프로그램• 채팅 클라이언트/서버 프로그램

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 2

Page 2: 6. 소켓프로그래밍과스레드: 채팅프로그래밍cs.sch.ac.kr/lecture/Python/2015/15-6-PythonGUI-socket.pdf · GUI 설계기법 네트워크요소 네트워크가장자리(edge)

GUI 설계기법

구성요소로 본 인터넷 (1)구성요소로 본 인터넷 (1)

호스트(host) 종단 시스템(end system) 호스트(host), 종단 시스템(end system)• 컴퓨터 네트워크에 연결된 컴퓨팅 장치

• 네트워크 응용들을 수행

통신 링크(communication link)• 동축케이블, 광케이블,구리선, 전파, 위성

• 다양한 전송률(transmission rate, 또는 bandwidth)로 데이터(패킷) 전송또는 bandwidth)로 데이터(패킷) 전송

패킷 스위치(packet switch) 패킷 스위치(packet switch)• 라우터(router), 스위치(switch)

• 패킷을 전달

6. 소켓 프로그래밍과 스레드

패킷을 전달

순천향대학교 컴퓨터공학과 3

GUI 설계기법

구성요소로 본 인터넷 (2)구성요소로 본 인터넷 (2)

인터넷(Internet) 인터넷(Internet)• 네트워크들의 네트워크

(network of networks)

프로토콜(protocol)• 정보(메시지)의 송수신을 제어

• 예TCP(Transmission Control protocol), IP(Internet Protocol),( ),HTTP, SMTP, 이더넷(Ethernet)

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 4

Page 3: 6. 소켓프로그래밍과스레드: 채팅프로그래밍cs.sch.ac.kr/lecture/Python/2015/15-6-PythonGUI-socket.pdf · GUI 설계기법 네트워크요소 네트워크가장자리(edge)

GUI 설계기법

네트워크 요소네트워크 요소

네트워크 가장자리(edge) 네트워크 가장자리(edge)• 호스트: 클라이언트와 서버

• 데이터 센터 내의 서버들

접속 네트워크(access network),속 네 워 ( ),물리 매체(physical media)• 유무선 통신 링크

네트워크 코어(core)• 라우터

• 네트워크들의 네트워크

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 5

GUI 설계기법

클라이언트/서버 구조클라이언트/서버 구조

서버 (server) 서버 (server)• 항상 켜져 있는 호스트

• 서비스 제공

• 고정 IP 주소

• 데이터 센터로 확장

클라이언트 (client)• 서버와 통신• 서버와 통신

• 서비스 요청

• 클라이언트들 간 직접 통신하지 않음

• 유동 IP 가질 수 있음

• 항상 연결되어 있지 않고 간헐적으로통신할 수 있음

6. 소켓 프로그래밍과 스레드

통신할 수 있음

순천향대학교 컴퓨터공학과 6

Page 4: 6. 소켓프로그래밍과스레드: 채팅프로그래밍cs.sch.ac.kr/lecture/Python/2015/15-6-PythonGUI-socket.pdf · GUI 설계기법 네트워크요소 네트워크가장자리(edge)

GUI 설계기법

인터넷 주소인터넷 주소

인터넷 주소는 IP 주소와 포트 번호로 구분 인터넷 주소는 IP 주소와 포트 번호로 구분

IP 주소• 호스트/라우터 주소호스트/라우터 주소

• IPv4 주소: 32 비트

• 32 비트 IP 주소 공간이 빠른 속도로 고갈되어 가고 있음I 6 128 비트=> IPv6: 128 비트

포트 번호 포트 번호• 호스트 내의 프로세스(프로그램)을 구분하는 번호

• 예

• HTTP 서버: 80, 메일 서버: 25

• 인터넷 표준 프로토콜에 대한 알려진(well-known) 포트번호 리스트는 www iana org 참조

6. 소켓 프로그래밍과 스레드

는 www.iana.org 참조

순천향대학교 컴퓨터공학과 7

GUI 설계기법

소켓 (Socket)소켓 (Socket)

프로세스는 소켓(socket)을 통해 네트워크로 메시지를 송수신 프로세스는 소켓(socket)을 통해 네트워크로 메시지를 송수신• 소켓은 호스트의 애플리케이션 계층과 트랜스포트 계층 간의

인터페이스

• 프로세스는 집(house), 소켓은 출입구(door)에 비유

• 송신 프로세스는 출입구(소켓) 바깥 네트워크로 메시지를 밀어냄

• 소켓은 애플리케이션과 네트워크 사이의 API(Application• 소켓은 애플리케이션과 네트워크 사이의 API(Application Programming Interface)

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 8

Page 5: 6. 소켓프로그래밍과스레드: 채팅프로그래밍cs.sch.ac.kr/lecture/Python/2015/15-6-PythonGUI-socket.pdf · GUI 설계기법 네트워크요소 네트워크가장자리(edge)

GUI 설계기법

소켓 프로그래밍소켓 프로그래밍

두 가지 형태의 트랜스포트 서비스 두 가지 형태의 트랜스포트 서비스• UDP: 비연결형, 비신뢰적인 데이터 전송

• TCP: 연결형, 신뢰적인 데이터 전송,

TCP 소켓 프로그래밍• 서버 프로세스가 먼저 수행 중에 있어야 함

• 서버는 클라이언트의 초기 접속을 처리하는 소켓을 생성해야 함

클라이언트는 서버에 초기 접속• 클라이언트는 서버에 초기 접속

• 클라이언트는 TCP 소켓을 생성하고, 서버 프로세스의 IP 주소와 포트 번호를 명시하여 서버에 접속

• 서버는 클라이언트에 의해 초기 접속 클라이언트와 통신하는 서버 프로세스를 위한 새로운 소켓(연결 소켓)을 생성

• 서버와 클라이언트가 데이터 송수신

6. 소켓 프로그래밍과 스레드

서버와 클라이언트가 데이터 송수신

순천향대학교 컴퓨터공학과 9

GUI 설계기법

TCP 클라이언트/서버 소켓 상호동작TCP 클라이언트/서버 소켓 상호동작

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 10

Page 6: 6. 소켓프로그래밍과스레드: 채팅프로그래밍cs.sch.ac.kr/lecture/Python/2015/15-6-PythonGUI-socket.pdf · GUI 설계기법 네트워크요소 네트워크가장자리(edge)

GUI 설계기법

TCP 클라이언트/서버 소켓 상호동작 – 파이썬TCP 클라이언트/서버 소켓 상호동작 파이썬

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 11

GUI 설계기법

파이썬 소켓 – 소켓 생성파이썬 소켓 소켓 생성

소켓 라이브러리: socket 모듈 소켓 라이브러리: socket 모듈

소켓 생성 소켓 생성• socket.socket(family, type, proto=0) 함수: return socket

• family: 프로토콜 표시, 인터넷인 경우 AF_INET

• type: 인터넷인 경우 트랜스포트 서비스 표시TCP: SOCK_STREAM, UDP: SOCK_DGRAM

• socket 객체를 리턴socket 객체를 리턴

• TCP 소켓 생성 예serverSocket socket(AF INET SOCK STREAM)serverSocket = socket(AF_INET, SOCK_STREAM)

소켓 종료• socket close() 메소드

6. 소켓 프로그래밍과 스레드

• socket.close() 메소드

순천향대학교 컴퓨터공학과 12

Page 7: 6. 소켓프로그래밍과스레드: 채팅프로그래밍cs.sch.ac.kr/lecture/Python/2015/15-6-PythonGUI-socket.pdf · GUI 설계기법 네트워크요소 네트워크가장자리(edge)

GUI 설계기법

파이썬 소켓 – 서버 연결 초기화파이썬 소켓 서버 연결 초기화

주소와 소켓 결합• 서버의 주소(IP 주소, 포츠번호)를 생성된 소켓과 결합

• socket.bind(address) 메소드• address: (host IP 주소 포트) 튜플• address: (host IP 주소, 포트) 튜플

– 튜플(tuple)은 리스트와 거의 비슷하나 리스트와 달리 요소의 변경(추가,삭제 등)할 수 없음

연결 요청 청취 연결 요청 청취• 클라이언트로부터 소켓 연결 요청을 청취

• socket.listen(backlog) 메소드( g)• backlog: 허용되는 최대 요청 수

연결 수락• 클라이언트의 연결 요청을 수락

• socket.accept() 메소드: return (socket, address)• 클라이언트와 통신을 위한 새로운 연결 소켓과 클라이언트의 주소를

6. 소켓 프로그래밍과 스레드

클라이언트와 통신을 위한 새로운 연결 소켓과 클라이언트의 주소를리턴

순천향대학교 컴퓨터공학과 13

GUI 설계기법

파이썬 소켓 – 서버 연결 초기화 예파이썬 소켓 서버 연결 초기화 예

서버 연결 초기화 예 서버 연결 초기화 예• 서버의 IP 주소가 '229.78.56.90' 이라고 가정

• 서버인 경우 IP 주소 생략 가능, ' '

• 7000 번 포트 번호로 클라이언트의 연결 요청을 청취하는 예

# 호스트 주소 지정

' 'serverName = '229.78.56.90'

serverPort = 7000

# 소켓 생성

serverSocket = socket(AF_INET, SOCK_STREAM)

# 주소와 소켓 결합

serverSocket bind((serverName serverPort))serverSocket.bind((serverName, serverPort))

# 연결 요청 청취

serverSocket.listen(5)

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 14

# 연결 요청 수락, 연결 소켓 생성

connectionSocket, addr = serverSocket.accept()

Page 8: 6. 소켓프로그래밍과스레드: 채팅프로그래밍cs.sch.ac.kr/lecture/Python/2015/15-6-PythonGUI-socket.pdf · GUI 설계기법 네트워크요소 네트워크가장자리(edge)

GUI 설계기법

파이썬 소켓 – 클라이언트 연결 초기화파이썬 소켓 클라이언트 연결 초기화

서버에 연결 요청 서버에 연결 요청• 서버에 연결을 요청

• socket.connect(address) 메소드( )

• address는 서버 주소(IP, 포트)

# 연결할 서버 주소 지정결할 서버 주 지정

serverName = '229.78.56.90'

serverPort = 7000

# 소켓 생성# 소켓 생성

clientSocket = socket(AF_INET, SOCK_STREAM)

# 서버에 연결 요청

clientSocket.connect((serverName, serverPort))

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 15

GUI 설계기법

파이썬 소켓 – 데이터 송수신파이썬 소켓 데이터 송수신

데이터 송신• socket.send(bytes) 메소드: return bytes_num

• bytes: 보내질 바이트 데이터들

• 보내진 데이터의 바이트 수 리턴• 보내진 데이터의 바이트 수 리턴

데이터 수신• socket recv(bufsize) 메소드: return bytessocket.recv(bufsize) 메소드: return bytes

• bufsize: 한 번에 받을 수 있는 최대 데이터의 바이트 수

• 받은 데이터의 바이트들 리턴

data = input('input string: ')

clientSocket.send(data.encode("utf8")) # 문자열 인코드하여 송신

……

data = clientSocket.recv(1024) # 데이터 수신

print(data)

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 16

print(data)

Page 9: 6. 소켓프로그래밍과스레드: 채팅프로그래밍cs.sch.ac.kr/lecture/Python/2015/15-6-PythonGUI-socket.pdf · GUI 설계기법 네트워크요소 네트워크가장자리(edge)

GUI 설계기법

TCP 소켓 프로그램 예 소개TCP 소켓 프로그램 예 소개

1 클라이언트는 키보드로 한 줄의 문자(데이터)를 읽고 그 데1. 클라이언트는 키보드로 한 줄의 문자(데이터)를 읽고, 그 데이터를 서버로 송신

2 서버는 데이터를 수신하고 문자를 대문자로 변환2. 서버는 데이터를 수신하고, 문자를 대문자로 변환

3. 서버는 수정된 데이터를 클라이언트에게 송신

4 클라이언트는 수정된 데이터를 수신하고 화면에 출력4. 클라이언트는 수정된 데이터를 수신하고 화면에 출력

한 컴퓨터에서 2개의 파이썬 셀 수행하여 클라이언트/서버 한 컴퓨터에서 2개의 파이썬 셀 수행하여 클라이언트/서버통신• 자기 자신을 나타내는 루프백(loopback) 주소 사용

127.0.0.1

• 윈도우에서 자기 자신의 주소를 알려면 콘솔창에서 ipconfig 명령c> ipconfig

6. 소켓 프로그래밍과 스레드

c> ipconfig

순천향대학교 컴퓨터공학과 17

GUI 설계기법

TCP 프로그램 예 – 서버 프로그램TCP 프로그램 예 서버 프로그램

### TCP 서버 프로그램

from socket import *

while True:

# 연결 요청 수락, 연결 소켓 리턴

connectionSocket, addr = S k ()# 네트워크 TCP 연결 초기화

print("Server TCP initialize...")

# 호스트 주소 지정

serverSocket.accept()

print("Client connected...", addr)

# 데이터 수신

( )serverPort = 7000

# 서버 소켓 생성

serverSocket = socket(AF_INET, SOCK_STREAM)

rawData = connectionSocket.recv(1024)

print("receive: ", rawData)

# 대문자 변환

# 주소와 소켓 결합

serverSocket.bind(('', serverPort))

# 연결 요청 청취

upperStr = rawData.upper()

# 데이터 송신

connectionSocket.send(upperStr)

serverSocket.listen(1) connectionSocket.close()

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 18

Page 10: 6. 소켓프로그래밍과스레드: 채팅프로그래밍cs.sch.ac.kr/lecture/Python/2015/15-6-PythonGUI-socket.pdf · GUI 설계기법 네트워크요소 네트워크가장자리(edge)

GUI 설계기법 TCP 프로그램 예 – 클라이언트 프로그램

### TCP 클라이언트 프로그램

from socket import *

# 네트워크 TCP 연결 초기화

print("Client TCP initialize...")

# 연결할 서버 주소 지정

serverName = '127.0.0.1'

serverPort = 7000

# 클라이언트 소켓 생성

clientSocket = socket(AF_INET, SOCK_STREAM)

# 서버에 연결 요청

clientSocket.connect((serverName, serverPort))clientSocket.connect((serverName, serverPort))

print("Server connected...")

rawData = input('Input string: ')rawData input( Input string )

# 문자열 인코드하여 데이터 송신

clientSocket.send(rawData.encode("utf8"))

# 데이터 수신

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 19

# 데이터 수신

modifiedStr = clientSocket.recv(1024)

print("from server: " , modifiedStr)

GUI 설계기법

시험주행시험주행

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 20

Page 11: 6. 소켓프로그래밍과스레드: 채팅프로그래밍cs.sch.ac.kr/lecture/Python/2015/15-6-PythonGUI-socket.pdf · GUI 설계기법 네트워크요소 네트워크가장자리(edge)

GUI 설계기법

TCP 프로그램 예 동작 검토TCP 프로그램 예 동작 검토

앞의 예제 프로그램의 예제• 서버 프로그램에서 같은 클라이언트 연결에 대해서도 매번 연결 요청

수락

루프 내에서 연결 요청 수락• 루프 내에서 연결 요청 수락

• 클라이언트 한 번 데이터 송수신 후 종료

• 데이터 수신 시 동작데이터 수신 시 동작

• 데이터 수신 시 데이터를 받을 때까지 프로그램이 블록킹(blocking)

• 데이터 수신 까지 프로그램이 다른 동작을 못함

개선된 프로그램 – 채팅 프로그램• 한 번 연결 수락으로 클라이언트 종료하지 않고 계속 데이터 송수신

루프 밖에서 연결 요청 수락• 루프 밖에서 연결 요청 수락

• 데이터 수신 블록킹 문제

• 데이터 수신 동작을 독자적인 프로그램(스레드)로 실행하여 해결

6. 소켓 프로그래밍과 스레드

데이터 수신 동작을 독자적인 프로그램(스레드)로 실행하여 해결

순천향대학교 컴퓨터공학과 21

GUI 설계기법

파이썬 스레드 생성 및 실행파이썬 스레드 생성 및 실행

스레드 라이브러리: threading 모듈 스레드 라이브러리: threading 모듈

스레드 생성• threading Thread(target=함수이름 args=(인수 ……)) 함수:threading.Thread(target 함수이름, args (인수, )) 함수:

return Thread

• target: 실행될 함수 이름

함수에 전달될 인수• args: 함수에 전달될 인수튜플로 표시되며 인수가 없으면 생략인수가 하나인 경우는 (인수,)로 표시

• Thread 객체를 리턴

• 스레드생성 예t = Thread(target=func, args = (10, 20))( g , g ( , ))

스레드 실행• Thread.start() 메소드

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 22

Page 12: 6. 소켓프로그래밍과스레드: 채팅프로그래밍cs.sch.ac.kr/lecture/Python/2015/15-6-PythonGUI-socket.pdf · GUI 설계기법 네트워크요소 네트워크가장자리(edge)

GUI 설계기법

스레드 예from threading import * 스레드 예from threading import *

# 스레드로 실행되는 함수

def testPrint(m n=5):def testPrint(m, n=5):

print("testPrint(%d) "%m)

for i in range(m,n):

print(" %d" %i)print( %d %i)

# 스레드 생성 및 실행

th Th d(t t t tP i t (2 ))th = Thread(target=testPrint, args=(2,))

th.start()

i t(" i P i t ")print("mainPrint ")

for i in range(100,106):

print(" %d" %i)

# 스레드 생성 및 실행

th = Thread(target=testPrint, args=(30,35))

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 23

th.start()

GUI 설계기법

시험주행시험주행

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 24

Page 13: 6. 소켓프로그래밍과스레드: 채팅프로그래밍cs.sch.ac.kr/lecture/Python/2015/15-6-PythonGUI-socket.pdf · GUI 설계기법 네트워크요소 네트워크가장자리(edge)

GUI 설계기법

채팅 프로그램 예채팅 프로그램 예

클라이언트와 서버가 서로 문자를 주고 받는 채팅 프로그램 클라이언트와 서버가 서로 문자를 주고 받는 채팅 프로그램예• 한 번 연결 수락으로 클라이언트 종료하지 않고 계속 데이터 송수신

• 루프 밖에서 연결 요청 수락

• 데이터 수신 동작을 독자적인 프로그램(스레드)로 실행

• 한글 송수신을 위해 UTF8 인코드/디코드

• 파이썬 GUI에서는 수신 문자가 바로 출력되지 않음=> 윈도우 프롬트 창에서 실행> 윈도우 프롬트 창에서 실행

• 문제점

• 1:1 채팅 프로그램

• 다:다 채팅 프로그램은 비동기 입출력 필요=> 파이썬은 select 모듈 제공

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 25

GUI 설계기법

채팅 프로그램 예 – 서버 프로그램채팅 프로그램 예 서버 프로그램

### 채팅 서버 프로그램

from socket import *

# 연결 요청 수락, 연결 소켓 리턴

connectionSocket, addr = serverSocket.accept()

from threading import *

# 메시지 수신 함수(스레드)

()

print("클라이언트 연결됨...", addr, "₩n")

# 스레드 생성 및 실행

( ) ()def serverRecv():

while True:# 데이터 수신하고, 디코드하여 출력

clientMsg = connectionSocket.recv(1024)

Thread(target=serverRecv).start()

while True:

# 송신 데이터 입력clientMsg connectionSocket.recv(1024)

print("[클라이언트] " + clientMsg.decode("utf8") + "₩n")

# 서버 네트워크 연결 초기화

# 송신 데이터 입력

rawData = input()

# 문자열 인코드하여 데이터 송신

connectionSocket.send(rawData.encode("utf8"))# 서버 네트워크 연결 초기화

print("서버 네트워크 연결 초기화 .....")

# 호스트 주소 지정

serverPort = 7000

connectionSocket.close()

serverPort 7000

# 서버 소켓 생성

serverSocket = socket(AF_INET, SOCK_STREAM)

# 주소와 소켓 결합

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 26

serverSocket.bind(('', serverPort))

# 연결 요청 청취

serverSocket.listen(1)

Page 14: 6. 소켓프로그래밍과스레드: 채팅프로그래밍cs.sch.ac.kr/lecture/Python/2015/15-6-PythonGUI-socket.pdf · GUI 설계기법 네트워크요소 네트워크가장자리(edge)

GUI 설계기법

채팅 프로그램 예 – 클라이언트 프로그램채팅 프로그램 예 클라이언트 프로그램

### 채팅 클라이언트 프로그램

f k t i t

# 서버에 연결 요청

li tS k t t(( N P t))from socket import *

from threading import *

# 메시지 수신 함수(스레드)

clientSocket.connect((serverName, serverPort))

print("서버 연결됨...₩n")

# 스레드 생성 및 실행# 메시지 수신 함수(스레드)

def clientRecv():

while True:

# 데이터 수신하고, 디코드하여 출력

# 스레드 생성 및 실행

Thread(target=clientRecv).start()

while True:

serverMsg = clientSocket.recv(1024)

print("[서버] " + serverMsg.decode("utf8") + "₩n")

# 송신 데이터 입력

rawData = input()

# 문자열 인코드하여 데이터 송신

li tS k t d( D t d (" tf8"))clientSocket.close()

# 클라이언트 네트워크 연결 초기화

clientSocket.send(rawData.encode("utf8"))

clientSocket.close()

print("클라이언트 네트워크 연결 초기화 .....")

# 연결할 서버 주소 지정

serverName = '127.0.0.1'

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 27

serverPort = 7000

# 클라이언트 소켓 생성

clientSocket = socket(AF_INET, SOCK_STREAM)

GUI 설계기법

시험주행시험주행

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 28

Page 15: 6. 소켓프로그래밍과스레드: 채팅프로그래밍cs.sch.ac.kr/lecture/Python/2015/15-6-PythonGUI-socket.pdf · GUI 설계기법 네트워크요소 네트워크가장자리(edge)

GUI 설계기법

과제과제

1 앞에서 소개된 채팅 프로그램을 작성하고 실행1. 앞에서 소개된 채팅 프로그램을 작성하고 실행

2 앞에서 배운 내용을 사용한 임의의 프로그램 작성2. 앞에서 배운 내용을 사용한 임의의 프로그램 작성• 프로그램 설명

• 프로그램 소스

• 실행 결과

6. 소켓 프로그래밍과 스레드순천향대학교 컴퓨터공학과 29