[ Qt 프로그래밍 ] 채팅 프로그램 만들기


채팅프로그램_소스파일.zip


채팅프로그램_실행파일.zip


GUI 프로그래밍은 많이 해봤지만, TCP/IP 프로그래밍은 거의 처음이네요.

 

Qt Creator를 실행해서 프로젝트를 하나 생성해 줍시다.

채팅 프로그램은 서버 프로그램과 클라이언트 프로그램 두가지로 나눠집니다.

즉, 서버프로그램, 클라이언트 프로그램을 따로 만들어야 합니다.

클라이언트 프로그램은 사용자 개개인을 말하고, 서버 프로그램은 사용자들이 전송한 메세지를 모아서 뿌려주는 기능을 합니다.

서버와 클라이언트는 일대다의 관계가 됩니다.

 

지금 살펴볼 코드는 단지 헤더파일입니다. 풀 코드는 제가 올린 소스파일에 있습니다.

 

 

-- 서버의 클래스 선언부 --

Colored By Color Scripter

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
31
#ifndef CHATSERVER_H
#define CHATSERVER_H
 
#include <QStringList>
#include <QTcpServer>
#include <QTcpSocket>
#include <QMap>
#include <QSet>
 
class chatServer : public QTcpServer
{
    Q_OBJECT
public:
    chatServer(QObject* parent=0);
 
private slots:
    void readyRead(); //클라이언트로부터 메세지가 전달됨을 감지하는 함수
    void disconnected();  //클라이언트가 접속을 끊을 경우를 감지하는 함수
    void sendUserList();  //새로 들어온 유저의 닉네임을 모든 클라이언트에게 뿌려주는 함수
 
protected:
    void incomingConnection(int socketfd);  //처음 유저가 접속을 시도할때 발생하는 함수
 
private:
    int userAmount; //유저 닉네임에 번호를 매김
    QSet<QTcpSocket*> clients;  //클라이언트 소켓저장
    QMap<QTcpSocket*,QString> users; //유저 이름 저장
};
 
#endif // CHATSERVER_H
 

 

 

-- 클라이언트 클래스 선언부 --

 

Colored By Color Scripter

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
31
32
#ifndef WIDGET_H
#define WIDGET_H
 
#include <QWidget>
 
namespace Ui {
class Widget;
}
 
class QTcpSocket;
 
class Widget : public QWidget
{
    Q_OBJECT
 
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
 
private slots:
    void readyRead(); //서버로부터 메시지가 온경우
    void connected(); //연결이 완료되었으면 서버에게 연결되었다고 알림
    void on_connectButton_clicked(); //연결 버튼을 누름
    void on_sendButton_clicked(); //채팅 메세지 전송 버튼을 누름
 
private:
    Ui::Widget *ui;
    QTcpSocket* socket; //나의 소켓
};
 
#endif // WIDGET_H
 

 

제가 올린 첨부파일에 올린 것은 위 코드대로 컴파일한 실행파일입니다.

첨부파일에 올린 실행압축파일을 다운받아서 임의의 위치에 압축을 풉니다.

폴더안에 chatServer_001.exe를 실행합니다.

chatClient_001.exe를 실행합니다.

아이피 주소는 본인 IP 주소를 입력하고, 포트번호는 4200입니다.

IP와 포트번호를 입력하고 접속 버튼을 누르면 서버에 접속이 됩니다.

 


 

 

이로써 채팅프로그램을 완성했습니다.

설명이 많이 부족하지만 추후에 추가하도록 하겠습니다.