2. 클라이언트

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
33
34
35
36
37
namespace websocketclient
{
    public partial class MainWindow : Window
    {
        private static MainWindow _mainWindow = null;
        public static MainWindow mainWindow
        {
            get
            {
                return _mainWindow;
            }
        }
        private Client client;
        public MainWindow()
        {
            InitializeComponent();
            _mainWindow = this;
            client = new Client();
        }
 
        public void recvMsg(string text)
        {
            this.Dispatcher.Invoke(() =>
            {
                RecvBox.Text += "\n";
                RecvBox.Text += text;
            });
        }
 
        private void sendButton_Click(object sender, RoutedEventArgs e)
        {
            client.SendMessage(sendBox.Text);
            sendBox.Text = "";
        }
    }
}
 
cs

UI가 동작하는 메인클래스는 서버와 크게 다를것이 없다.

여기서 클라이언트를 생성해주자.

1
2
private Client client;
client = new Client();
cs



실제 클라이언트

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
using WebSocketSharp;
 
namespace websocketclient
{
    public class Client
    {
        private WebSocket mWebSocket;
        public Client()
        {
            StartConnect();
        }        
        public void StartConnect()
        {
            //mWebSocket = new WebSocket("ws://localhost:4649/Chat");
            mWebSocket = new WebSocket("ws://192.168.0.21:14649/Chat");
            mWebSocket.OnOpen += (sender, e) =>
            {
                //mWebSocket.Send("Hi, there!");
            };
            mWebSocket.OnMessage += (sender, e) =>
            {
                MainWindow.mainWindow.recvMsg(e.Data);
            };
            mWebSocket.Connect();
        }
        public void SendMessage(string msg)
        {
            mWebSocket.Send("nickname: " + msg);
        }
    }
}
cs

클라이언트가 실행되면 서버에 연결된다.



우선 웹소켓을 만들어 서버의 주소로 설정해준다.

1
mWebSocket = new WebSocket("ws://192.168.0.21:14649/Chat");
cs

192.168.0.21은 서버의 IP주소고, 14649는 포트번호, /Chat은 Chat서버로 접속하겠다는 뜻이다.

내 컴퓨터가 서버라면 IP대신 localhost를 사용하면 된다.


이후 OnOpen과 OnMessage에 함수를 추가해준다.

1
2
3
4
5
6
7
8
mWebSocket.OnOpen += (sender, e) =>
{
    //mWebSocket.Send("Hi, there!");
};
mWebSocket.OnMessage += (sender, e) =>
{
    MainWindow.mainWindow.recvMsg(e.Data);
};
cs

OnOpen은 연결이 되면 실행되고 OnMessage는 서버와 마찬가지로 메세지를 받으면 불리게 된다.


그리고 Connect 해주면 서버에 연결된다.

1
mWebSocket.Connect();
cs





이제 서버를 켜고 클라이언트를 실행해보자.


서버 프로그램을 켜고 시작버튼을 누르면 서버가 열리면서 서버시작이라는 글자가 나올 것이다.


이후 클라이언트를 켜고 글자를 적어 전송버튼을 누르면 서버에 메세지가 보내진다. (Send)

메세지를 받은 서버는 메세지를 출력하고 다시 클라이언트로 보낸다. (Sessions.Broadcast)

클라이언트는 서버가 다시 보내준 메세지를 받아 textbox에 출력한다.



웹소켓 이야기는 아니지만 읽어보면 좋을만한 글. 동기와 비동기에 관한 설명

http://jangpd007.tistory.com/70

Posted by misty_
,