) Pertemuan 10 Pemrograman Jaringan pada Windows dengan VC++ 6.0

Download Report

Transcript ) Pertemuan 10 Pemrograman Jaringan pada Windows dengan VC++ 6.0

Matakuliah : H0483 – Network Programming
Tahun
: 2008
Versi
: 2.0
Pertemuan 10
Pemrograman Jaringan pada
Windows dengan VC++ 6.0)
1
Learning Outcomes
Pada akhir pertemuan ini, diharapkan mahasiswa
akan mampu :
• Mendemonstrasikan program aplikasi
jaringan komputer pada sistem operasi
windows dengan menggunakan Windows
Socket.
2
Outline Materi
• Kasus : Membuat Program Chatting
• Tahapan tahapan membuat program di
VC++ 6.0
• Memasukkan komponen Winsock 6.0 ke
dalam program
• Membuat Form
• Coding
• Test Program
3
Membuat Program Chatting
• Program server dengan I/O Multiplexing
pada pertemuan 7 sebelumnya dapat
digunakan untuk server (pada Linux) untuk
membuat sistem Chatting
• Sedangkan Clientnya dibuat dengan
Visual Programming (VC++ 6.0) agar
tampilannya lebih menarik.
4
Tahapan Membuat Program
• Jalankan VC++ 6.0
• Pilih menu FileNew
• Pilih MFC AppWizard(exe), kemudian isi location dan
Project name.
5
Tahapan Membuat Program
• Pilih Dialog Based, kemudian klik Next
6
Tahapan Membuat Program
• Untuk memasukkan komponen WinSock ke program
pilih : Windows Sockets
• Kemudian Klik Finish
7
Tahapan Membuat Program
• Kemudian buat Form sbb:
Edit Box
Button
List Box
Edit Box
8
Data Member
• Tambahkan data member sbb:
CButton m_ctrlCancel;
CButton m_ctrlSend;
CButton m_ctrlDisConnect;
CButton m_ctrlOK;
CListBox m_ctrlListBox;
CString
m_csIPaddress;
CString
m_csPort;
CString
m_csNama;
CString
m_csMessage;
SOCKET m_sClient;
struct sockaddr_in m_server, m_client;
BOOL m_bKill;
BOOL m_bConnect;
9
Member Function
Jika tombol Connect di Klik maka akan menjalankan program sbb:
void CClientChattingDlg::OnOKConnect()
{
WSADATA wsd;
CWaitCursor wait;
CString str;
UpdateData(TRUE);
if(WSAStartup(MAKEWORD(2,2), &wsd) != 0){
AfxMessageBox("Failed to load Winsock library!\n");
return;
}
m_sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_sClient == INVALID_SOCKET){
str.Format("socket() failed: %d", WSAGetLastError());
AfxMessageBox(str);
return;
}
m_server.sin_family = AF_INET;
m_server.sin_port = htons(atoi(m_csPort));
m_server.sin_addr.s_addr = inet_addr(m_csIPaddress);
if(connect(m_sClient, (struct sockaddr *)&m_server,sizeof(m_server)) ==
SOCKET_ERROR){
str.Format("connect() failed: %d", WSAGetLastError());
AfxMessageBox(str);
return;
}
m_ctrlSend.EnableWindow(TRUE);
m_ctrlDisConnect.EnableWindow(TRUE);
m_ctrlCancel.EnableWindow(FALSE);
AfxBeginThread(&thread,0);
}
10
Member Function
Jika tombol Send di klik akan menjalankan instruksi
sbb:
void CClientChattingDlg::OnSend()
{
CString str;
UpdateData(TRUE);
str=m_csNama+": "+m_csMessage;
if(send(m_sClient,str, str.GetLength(),0) == SOCKET_ERROR){
AfxMessageBox("Error sending message");
return;
}
}
11
Member Function
• Jika tombol Cancel di klik akan menjalankan
instruksi sbb:
void CClientChattingDlg::OnCancel()
{
m_bKill=TRUE;
while(m_bKill && m_bConnect) DoEvents();
CDialog::OnCancel();
}
12
Member Function
void CClientChattingDlg::OnDisconnectbtn()
{
CString str;
m_bKill = TRUE;
str=m_csNama+": DisConnect";
if(send(m_sClient,str,str.GetLength(),0)==SOCKET_ERROR){
AfxMessageBox("Error sending message");
return;
}
m_ctrlOK.EnableWindow(TRUE);
m_ctrlDisConnect.EnableWindow(FALSE);
m_ctrlCancel.EnableWindow(TRUE);
}
13
Member Function
UINT thread(LPVOID p)
{
int s;
char ss[200];
CClientChattingDlg *dlg=(CClientChattingDlg*)AfxGetApp()->GetMainWnd();
dlg->m_bConnect = TRUE;
while(!(dlg->m_bKill)){
s=recv(dlg->m_sClient,ss,200,0);
ss[s]='\0';
dlg->m_ctrlListBox.InsertString(0,ss);
}
closesocket(dlg->m_sClient);
WSACleanup();
dlg->m_bKill=FALSE;
dlg->m_bConnect = FALSE;
AfxEndThread(0);
return 0;
}
14
Member Function
void CClientChattingDlg::DoEvents()
{
MSG msg;
// Process existing messages in the application's
message queue.
// When the queue is empty, do clean up and return.
while
(::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
{
if (!AfxGetThread()->PumpMessage()) return;
}
}
15
Testing
• Hubungkan dua komputer dalam LAN
• Set IP Address masing-masing komputer
• Jalankan program server pada komputer
dengan O/S Linux
• Jalankan program client pada komputer
dengan O/S Windows
• Coba Connect dengan Server
16
Latihan
• Buat program DayTimeServer dan
DayTimeClient pada Windows (Bahasa
pemrograman VC++ atau yang lainnya)
• Buat Program EchoServer dan program
Clientnya pada Windows dengan bahasa
pemrograman VC++ atau yang lain
17