實(shí)驗(yàn)三、WINSOCK套接字編程實(shí)驗(yàn)報(bào)告(共6頁(yè))_第1頁(yè)
實(shí)驗(yàn)三、WINSOCK套接字編程實(shí)驗(yàn)報(bào)告(共6頁(yè))_第2頁(yè)
實(shí)驗(yàn)三、WINSOCK套接字編程實(shí)驗(yàn)報(bào)告(共6頁(yè))_第3頁(yè)
實(shí)驗(yàn)三、WINSOCK套接字編程實(shí)驗(yàn)報(bào)告(共6頁(yè))_第4頁(yè)
實(shí)驗(yàn)三、WINSOCK套接字編程實(shí)驗(yàn)報(bào)告(共6頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上實(shí)驗(yàn)三、WINSOCK套接字編程實(shí)驗(yàn)報(bào)告序號(hào): 姓名: 學(xué)號(hào): 成績(jī): 指導(dǎo)老師: 1實(shí)驗(yàn)?zāi)康模河肅或JAVA語(yǔ)言編寫(xiě)客戶(hù)端、服務(wù)器程序,實(shí)現(xiàn)基于TCP或UDP的網(wǎng)絡(luò)通信數(shù)據(jù)傳輸服務(wù),熟悉基于TCP或UDP的Socket編程原理。2實(shí)驗(yàn)環(huán)境:建立在TCP/IP 網(wǎng)絡(luò)體系結(jié)構(gòu)之上計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)環(huán)境。各計(jì)算機(jī)除了安裝TCP/IP 軟件外,還安裝了TCP/IP 開(kāi)發(fā)系統(tǒng)。計(jì)算機(jī)具備Windows環(huán)境中套接字socket 的編程接口功能,可為用戶(hù)提供全網(wǎng)范圍的進(jìn)程通信功能。3實(shí)驗(yàn)指導(dǎo):參見(jiàn)套接字編程實(shí)驗(yàn)指導(dǎo)4實(shí)驗(yàn)步驟(1)運(yùn)行指導(dǎo)書(shū)中給出的參考程序,分析實(shí)驗(yàn)結(jié)果,并回答問(wèn)題(

2、1)-(3)(2)根據(jù)給定參考程序修改代碼,完善修改服務(wù)器和客戶(hù)端的功能。并回答問(wèn)題(4)-(5)5實(shí)驗(yàn)結(jié)果分析(1) 為什么在服務(wù)器和客戶(hù)端要包含winsock2.h文件?答:windows socket的頭文件,不包含該頭文件,關(guān)于socket編程的結(jié)構(gòu)和函數(shù)等都不能被調(diào)用。(2) 為什么在服務(wù)器和客戶(hù)端程序中要加入#pragma comment(lib,"ws2_32.lib") 語(yǔ)句,如果不加會(huì)出現(xiàn)什么問(wèn)題?答:#pragma   comment(lib, "Ws2_32.lib ")表示鏈接Ws2_32.lib這個(gè)庫(kù)。 和在工程設(shè)置里

3、寫(xiě)上鏈入Ws2_32.lib的效果一樣,不過(guò)這種方法寫(xiě)的 程序別人在使用你的代碼的時(shí)候就不用再設(shè)置工程settings了。如果沒(méi)有這個(gè)(3) 為什么在服務(wù)器和客戶(hù)端程序中要使用WSAStartup函數(shù),如果不用,程序會(huì)有什么問(wèn)題?答:使用Socket的程序在使用Socket之前必須調(diào)用WSAStartup函數(shù)。該函數(shù)的第一個(gè)參數(shù)指明程序請(qǐng)求使用的Socket版本,其中高位字節(jié)指明副版本、低位字節(jié)指明主版本;操作系統(tǒng)利用第二個(gè)參數(shù)返回請(qǐng)求的Socket的版本信息。當(dāng)一個(gè)應(yīng)用程序調(diào)用WSAStartup函數(shù)時(shí),操作系統(tǒng)根據(jù)請(qǐng)求的Socket版本來(lái)搜索相應(yīng)的Socket庫(kù),然后綁定找到的Socket

4、庫(kù)到該應(yīng)用程序中。以后應(yīng)用程序就可以調(diào)用所請(qǐng)求的Socket庫(kù)中的其它Socket函數(shù)了。該函數(shù)執(zhí)行成功后返回0。如果不用,應(yīng)用程序?qū)o(wú)法調(diào)用socket函數(shù)。 (4) 修改后的程序完成實(shí)現(xiàn)了什么功能,附上修改后的源代碼。(修改或填加的代碼用波浪線(xiàn)標(biāo)注,并填加注釋?zhuān)⒏缴蠈?shí)驗(yàn)截圖實(shí)現(xiàn)功能:在有雙方IP的情況下可以實(shí)現(xiàn)窗體界面的交互式聊天功能,可以中英文符號(hào)數(shù)字隨意輸入。截圖:客戶(hù)端:服務(wù)器:客戶(hù)端代碼:#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <errno

5、.h>#include <string.h>#include <sys/types.h>#include <winsock2.h>#include <conio.h> #include <windows.h> #pragma comment(lib,"ws2_32.lib") #define PORT 3490 /* 客戶(hù)機(jī)連接遠(yuǎn)程主機(jī)的端口*/ #define MAXDATASIZE 100 /* 每次可以接收的最大字節(jié)*/ int _tmain(int argc, _TCHAR* argv) WORD w

6、VersionRequested; WSADATA wsaData; int err = 0 ,rval = 0 ; SOCKET fd; struct sockaddr_in servaddr; struct hostent* hp; char buf1024 = "" wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) return -1; if (fd = socket(AF_INET, SOCK_STREA

7、M, 0) < 0) printf("Can not create socket!"); exit(2); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(PORT); hp = gethostbyname("113.55.38.221"); /輸入服務(wù)器ip地址 /根據(jù)服務(wù)器的網(wǎng)絡(luò)計(jì)算/機(jī)名稱(chēng)得到其IP地址等信息 memcpy(char*)&servaddr.sin_addr, (char*)hp->h_addr,hp->h_length); memset(se

8、rvaddr.sin_zero, 0, sizeof(servaddr.sin_zero); /和服務(wù)器創(chuàng)建連接 rval = connect(fd, (sockaddr*)&servaddr, sizeof(servaddr); if (rval < 0) /創(chuàng)建連接失敗 printf("Can not create connect!"); exit(3); elsewhile(1) memset(buf, 0, 1024); printf("客戶(hù)端-:"); scanf("%s",&buf); /向服務(wù)器發(fā)送

9、信息 rval = send(fd, buf, strlen(buf) + 1,0); if(rval < 0) printf("Write error!");if(rval=recv(fd,buf,sizeof(buf),0)<0) perror("reading stream message"); if(rval=0) printf("服務(wù)器- :%sn",buf); closesocket(fd); exit(5);服務(wù)器代碼:#include "stdafx.h"#include <std

10、io.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include<conio.h> #include<winsock2.h>#include<windows.h> #pragma comment(lib,"ws2_32.lib") #define MYPORT 3490 /*定義用戶(hù)連接端口*/ #define BACKLOG 10 /*多少等待連接控制*/ #defi

11、ne SERVER_IP_ADDR "113.55.38.221" /輸入本機(jī)ip地址 /*服務(wù)器的IP地址*/ int _tmain(int argc, _TCHAR* argv) SOCKET sock, msgsock; int length = 0; struct sockaddr_in server; struct sockaddr tcpaddr; char buf1024 = "" int rval= 0, len= 0, err = 0; WORD wVersionRequested; WSADATA wsaData; /*指定socke

12、t版本,否則創(chuàng)建socket失敗,即使創(chuàng)建socket返回值不為-1,但是bind時(shí)會(huì)失敗*/ wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) return -1; /* 建立套接字*/ sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) perror("opening stream socket"); exit(1); /* 使用任意端口命名套接字

13、*/ server.sin_family = AF_INET; server.sin_port = htons(MYPORT); server.sin_addr.s_addr = inet_addr(SERVER_IP_ADDR); memset(server.sin_zero, 0, sizeof(server.sin_zero); /將服務(wù)器地址與socket綁定在一起 rval = bind(sock, (struct sockaddr *)&server, sizeof(server); if (rval < 0) perror("binding stream

14、socket"); exit(1); / 找出指定的端口號(hào)并打印出來(lái) length = sizeof(server); if (getsockname(sock, (struct sockaddr *)&server, &length) < 0) perror("getting socket name"); exit(1); printf("socket port #%dn", ntohs(server.sin_port); / 開(kāi)始接收連接,最大請(qǐng)求數(shù)為 listen(sock, 5); len = sizeof(str

15、uct sockaddr); do msgsock = accept(sock, (struct sockaddr *)&tcpaddr, (int *)&len); if (msgsock = -1) perror("accept"); else while(1)memset(buf, 0, sizeof(buf); if ( (rval = recv(msgsock, buf, sizeof(buf),0) < 0) perror("reading stream message"); if (rval = 0) printf("客戶(hù)端-%sn", buf);printf("服務(wù)器->"); scanf("%s",&buf); rval=send(msgsock,buf,strlen(buf)+1,0); closesocket(msgsock); while (TRUE); /* 因?yàn)檫@個(gè)程序已經(jīng)有了一個(gè)無(wú)限循環(huán),所以套接字&q

溫馨提示

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

評(píng)論

0/150

提交評(píng)論