基于tcp的客戶端服務(wù)器程序代碼_第1頁
基于tcp的客戶端服務(wù)器程序代碼_第2頁
基于tcp的客戶端服務(wù)器程序代碼_第3頁
基于tcp的客戶端服務(wù)器程序代碼_第4頁
基于tcp的客戶端服務(wù)器程序代碼_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

武漢理工大學(xué)計算機網(wǎng)絡(luò)與通信課程設(shè)計說明書服務(wù)器端程序 / TODO: Add extra initialization hereaddr.sin_family=AF_INET;/TCP IPv4 addr sin_port=htons(8090); /指定端口號,動態(tài)端口的范圍從1024到65535,這里使用8090 addr.sin_addr.S_un.S_addr=INADDR_ANY; /*機器上可能有多塊網(wǎng)卡,也就有多個IP地址, 如果指定為INADDR_ANY,那么系統(tǒng)將綁定默認(rèn)的網(wǎng)卡即IP地址*/ s=:socket(AF_INET,SOCK_STREAM,0); /利用socket函數(shù)創(chuàng)建套接字 :bind(s,(sockaddr*)&addr,sizeof(addr);/調(diào)用bind函數(shù)把套接字s綁定到本地地址和指定端口號上 :listen(s,5); /s監(jiān)聽網(wǎng)絡(luò)中的所有客戶機:WSAAsyncSelect(s,this-m_hWnd,WM_SOCKET,FD_ACCEPT|FD_READ);/接收讀和連接通知 GetDlgItem(IDC_TEXT)-EnableWindow(true); /激活編輯框顯示 GetDlgItem(IDC_ADDR)-SetWindowText(服務(wù)器開始監(jiān)聽!);void CTCPDlg:OnSocket(WPARAM wParam,LPARAM lParam) CString str; CString str13; CString str14; unsigned short int str15; char cs100=0;switch (lParam)/響應(yīng)通知 case FD_ACCEPT: int lenth=sizeof(add1); s1=:accept(s,(sockaddr*)&add1,&lenth); /*s1為服務(wù)器和客戶端通信的套接字 add1為客戶端通信的套接字*/ n=n+1; str13.Format(有%d客戶已經(jīng)連接上了,n); /str13=有n客戶已經(jīng)連接上了 str13+=rn; str13+=:inet_ntoa(add1.sin_addr); /ip地址轉(zhuǎn)換成點分十進(jìn)制的字符串 str13+=登陸; GetDlgItem(IDC_TEXT)-GetWindowText(str); str13+=rn; str+=str13; GetDlgItem(IDC_TEXT)-SetWindowText(str); /顯示已經(jīng)連接以及連接的客戶端 str14=:inet_ntoa(add1.sin_addr); GetDlgItem(client_ip)-SetWindowText(str14); /顯示客戶端的ip str15=htons(add1.sin_port); SetDlgItemInt(client_port,str15,1); /顯示客戶端的port CString st; st=I am a server.; :send(s1,st.GetBuffer(1),strlen(st),0);break;case FD_READ: CString num=,num1=,num2=; :recv(s1,cs,100,0); /接收客戶端的數(shù)據(jù) for(int i=0;iGetWindowText(num1); num1+=rn; num+=num1; num+=(LPTSTR):inet_ntoa(add1.sin_addr); /LPTSTR與char*等價 num+=客戶端:; num+=num2; GetDlgItem(IDC_TEXT)-SetWindowText(num); /顯示客戶端發(fā)來的信息 break;void CTCPDlg:OnSend() /發(fā)送按鈕的事件函數(shù)/ TODO: Add your control notification handler code hereCString str=,str1,str2;GetDlgItem(IDC_SENDTEXT)-GetWindowText(str);if(str=)MessageBox(發(fā)送的消息不能為空);/不能發(fā)送空消息elseif(:send(s1,str.GetBuffer(1),strlen(str),0)!=SOCKET_ERROR) GetDlgItem(IDC_TEXT)-GetWindowText(str1);str1+=rn;str1+=發(fā)送:; str1+=str; GetDlgItem(IDC_TEXT)-SetWindowText(str1);/顯示發(fā)送的消息 elseGetDlgItem(IDC_TEXT)-GetWindowText(str1); str1+=rn;str1+=消息發(fā)送失??!; GetDlgItem(IDC_TEXT)-SetWindowText(str1); /提示發(fā)送消息失敗客戶端程序GetDlgItem(IDC_SENDTEXT)-EnableWindow(false);GetDlgItem(IDC_SEND)-EnableWindow(false); /禁止發(fā)送s=:socket(AF_INET,SOCK_STREAM,0);/創(chuàng)建套接字: WSAAsyncSelect(s,this-m_hWnd,WM_SOCKET, FD_READ);/接收讀通知void CTCPDlg:OnConnect() /連接按鈕的事件函數(shù) CString str,str1; int port; GetDlgItem(IDC_ADDR)-GetWindowText(str); GetDlgItem(IDC_PORT)-GetWindowText(str1); /輸入服務(wù)器IP和端口號 if(str=|str1=) MessageBox(服務(wù)器地址或端口不能為NULL); else port=atoi(str1.GetBuffer(1); /把字符串形式的port轉(zhuǎn)換成整型數(shù) addr.sin_family=AF_INET; addr.sin_addr.S_un.S_addr=inet_addr(str.GetBuffer(1); /將點分十進(jìn)制的IP轉(zhuǎn)換成長整數(shù)型數(shù) addr.sin_port=ntohs(port); /將無符號短整形port由網(wǎng)絡(luò)字節(jié)順序轉(zhuǎn)換為主機字節(jié)順序 /addr存儲服務(wù)器套接字信息,s存儲客戶端套接字信息 GetDlgItem(IDC_TEXT)-SetWindowText(正在連接服務(wù)器.rn); if(:connect(s,(sockaddr*)&addr,sizeof(addr) /向服務(wù)器發(fā)送連接請求 CString st; st=I am aclient; :send(s,st.GetBuffer(1),strlen(st),0); GetDlgItem(IDC_TEXT)-GetWindowText(str); str+=連接服務(wù)器成功!rn; GetDlgItem(IDC_TEXT)-SetWindowText(str); GetDlgItem(IDC_SENDTEXT)-EnableWindow(true); /發(fā)送框可用 GetDlgItem(IDC_SEND)-EnableWindow(true); /發(fā)送按鈕可用 GetDlgItem(IDC_ADDR)-EnableWindow(false); /禁止再在輸入服務(wù)器ip GetDlgItem(IDC_PORT)-EnableWindow(false); /禁止再輸入服務(wù)器的端口號 else GetDlgItem(IDC_TEXT)-GetWindowText(str); str+=連接服務(wù)器失?。≌堉卦噐n; GetDlgItem(IDC_TEXT)-SetWindowText(str); void CTCPDlg:OnSend() /發(fā)送按鈕的事件函數(shù)/ TODO: Add your control notification handler code hereCString str,str1;GetDlgItem(IDC_SENDTEXT)-GetWindowText(str);if(str=)MessageBox(發(fā)送的消息不能為空);/不能發(fā)送空消息else if(:send(s,str.GetBuffer(1),strlen(str),0)!=SOCKET_ERROR)GetDlgItem(IDC_TEXT)-GetWindowText(str1);str1+=rn;str1+=發(fā)送:+str;GetDlgItem(IDC_TEXT)-SetWindowText(str1);/顯示發(fā)送的消息 else GetDlgItem(IDC_TEXT)-GetWindowText(str1); str1+=rn;str1+=消息發(fā)送失?。? GetDlgItem(IDC_TEXT)-SetWindowText(str1); /提示發(fā)送消息失敗void CTCPDlg:OnSocket(WPARAM wParam,LPARAM lParam)char cs100=0; if(lParam=FD_READ)CString num=,num2=;:recv(s,cs,100,0);for

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論