文件傳輸問題實(shí)驗(yàn)報(bào)告_第1頁
文件傳輸問題實(shí)驗(yàn)報(bào)告_第2頁
文件傳輸問題實(shí)驗(yàn)報(bào)告_第3頁
文件傳輸問題實(shí)驗(yàn)報(bào)告_第4頁
文件傳輸問題實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡介

蘭州交通大學(xué)操作系統(tǒng)——實(shí)驗(yàn)報(bào)告PAGE4-操作系統(tǒng)——文件傳輸目錄TOC\o"1-2"\h\z\u一、 實(shí)驗(yàn)?zāi)康?-2-二、 實(shí)驗(yàn)原理 -2-三、 設(shè)計(jì)概述 -2-1、 windowsDLL的初始化和結(jié)束釋放 -2-2、 創(chuàng)建套接字 -2-3、 地址綁定 -2-4、 服務(wù)器套接字置為監(jiān)聽模式 -2-5、 建立連接,進(jìn)行文件傳輸 -3-四、 實(shí)驗(yàn)結(jié)果及分析: -3-客戶端運(yùn)行結(jié)果 -3-服務(wù)器端運(yùn)行結(jié)果 -4-五、 源代碼 -4-服務(wù)器端 -4-客戶端 -6-實(shí)驗(yàn)?zāi)康氖煜CP/IP協(xié)議的功能和網(wǎng)絡(luò)操作編寫小型的socket應(yīng)用程序,初步了解windows環(huán)境下使用sockets編程,實(shí)現(xiàn)點(diǎn)對點(diǎn)文本傳輸。實(shí)驗(yàn)原理Windowssocket包含了人們所熟悉的BerkeleySocket風(fēng)格的函數(shù)庫,也包含了一組針對windows的擴(kuò)展庫函數(shù),以使程序員能充分的利用windows驅(qū)動(dòng)消息機(jī)制進(jìn)行編程。WindowsSockets的規(guī)范本意在于提供給應(yīng)用開發(fā)者一套簡單的API,并讓個(gè)網(wǎng)絡(luò)應(yīng)用軟件開發(fā)商遵守該協(xié)議。此外在一個(gè)特定的版本windows基礎(chǔ)上,Windowssocket也定義了一個(gè)二進(jìn)制借口(ABI),從此來保證WindowssocketAPI應(yīng)用程序能夠在任何符合Windowssocket協(xié)議的實(shí)現(xiàn)上工作。設(shè)計(jì)概述windowsDLL的初始化和結(jié)束釋放先調(diào)用WSAStartup()函數(shù)對ws_32.dll進(jìn)行加載初始化,協(xié)商windows版本支持,并分配必要的資源。在應(yīng)用程序關(guān)閉套接字后,還應(yīng)調(diào)用WSACleanUp()函數(shù)來卸載和中止動(dòng)態(tài)鏈接庫,釋放資源,以備以后使用。創(chuàng)建套接字服務(wù)進(jìn)程和客戶進(jìn)程在實(shí)現(xiàn)通信前必須創(chuàng)建各自的套接字,然后才能用相應(yīng)的套接字進(jìn)行發(fā)送接收操作,服務(wù)進(jìn)程總是先于客戶端進(jìn)程啟動(dòng),服務(wù)器端進(jìn)程和客戶端進(jìn)程創(chuàng)建套接字。Socket()函數(shù)實(shí)現(xiàn)代碼如下:SOCKETserSocket=socket(AF_INET,SOCK_STREAM,0);//創(chuàng)建了可識別套接字地址綁定當(dāng)調(diào)用socket()創(chuàng)建套接字后,服務(wù)器必須把套接字與自己的地址顯式地建立聯(lián)系,以便客戶端向該IP地址和端口號的服務(wù)進(jìn)程請求服務(wù),這個(gè)過程是通過調(diào)用函數(shù)bind()實(shí)現(xiàn)的。bind()函數(shù)原型如下:intbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);服務(wù)器套接字置為監(jiān)聽模式將服務(wù)器設(shè)置為監(jiān)聽工作方式后,使用API調(diào)用listen():intlisten(SOCKETs,intbacklog);第一個(gè)參數(shù)指定套接字。第二個(gè)參數(shù)指定了正在等待連接的最大隊(duì)列長度。若無錯(cuò)誤發(fā)生,則listen()函數(shù)返回0。建立連接,進(jìn)行文件傳輸調(diào)用gets(path)獲得傳輸文件的路徑和存放文件路徑,這個(gè)過程中還需調(diào)用send()函數(shù)和recv()函數(shù),共同協(xié)調(diào)實(shí)現(xiàn)文件傳送。實(shí)驗(yàn)結(jié)果及分析:客戶端運(yùn)行結(jié)果服務(wù)器端運(yùn)行結(jié)果源代碼服務(wù)器端#include<WINSOCK2.H>

#include<stdio.h>

#pragmacomment(lib,"ws2_32.lib")

#defineSIZE1024*8

voidmain()

{

//創(chuàng)建套接字

WORDmyVersionRequest;

WSADATAwsaData;

myVersionRequest=MAKEWORD(1,1);

interr;

err=WSAStartup(myVersionRequest,&wsaData);

if(!err)

{

printf("已打開套接字\n");}

else

{

//進(jìn)一步綁定套接字

printf("嵌套字未打開!");

return;

}

SOCKETserSocket=socket(AF_INET,SOCK_STREAM,0);//創(chuàng)建了可識別套接字

//需要綁定的參數(shù)

SOCKADDR_INaddr;

addr.sin_family=AF_INET;

addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//ip地址

addr.sin_port=htons(6000);//綁定端口bind(serSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));//綁定完成

listen(serSocket,5);//其中第二個(gè)參數(shù)代表能夠接收的最多的連接數(shù)//////////////////////////////////////////////////////////////////////////

//開始進(jìn)行監(jiān)聽

//////////////////////////////////////////////////////////////////////////

SOCKADDR_INclientsocket;

intlen=sizeof(SOCKADDR);

SOCKETserConn;

charsendBuf[50];

serConn=accept(serSocket,(SOCKADDR*)&clientsocket,&len);//如果這里不是accept而是conection的話。。就會不斷的監(jiān)聽

sprintf(sendBuf,"welcome%stobejing",inet_ntoa(clientsocket.sin_addr));//找對對應(yīng)的IP并且將這行字打印到那里

//發(fā)送歡迎信息

send(serConn,sendBuf,strlen(sendBuf)+1,0);

FILE*fp;

lable1:printf("客戶端已打開\n請輸入存放文件地址:\n");

charpath[100]={"0"};

inti=0;

while(path[i]!='\0')

{

if(path[i]=='/')

path[i]='\\';

i++;

}

gets(path);

if((fp=fopen(path,"wb"))==NULL)

{

printf("文件未打開\n");

gotolable1;

}

else

{

printf("文件已打開開始文件傳輸\n");

//發(fā)送開始標(biāo)志

send(serConn,"開始傳送",strlen("開始傳送")+1,0);

//得到文件大小

chardatalength[20];

longintlength=0;

recv(serConn,datalength,21,0);

length=atol(datalength);

printf("得到文件大小:%d\n",length);

//開始傳送

doublecent=0.0;

charreceiveBuf[SIZE];

longintx=0;

while(1)

{

x=x+SIZE;

if(x<length)

{

cent=(double)x*100.0/(double)length;

printf("已接收:%4.2f%\n",cent);

recv(serConn,receiveBuf,SIZE+1,0);

fwrite(receiveBuf,1,SIZE,fp);

}

else

{

recv(serConn,receiveBuf,length+SIZE-x+1,0);

printf("文件接收完畢\n");

fwrite(receiveBuf,1,length+SIZE-x,fp);

fclose(fp);

break;

}

}

}

closesocket(serConn);//關(guān)閉

WSACleanup();//釋放資源的操作

system("pause");

}客戶端#include<WINSOCK2.H>

#include<stdio.h>

#pragmacomment(lib,"ws2_32.lib")

#defineSIZE1024*8

voidmain()

{

FILE*fp;

interr;

intlength=0;

SOCKETclientSocket;

SOCKADDR_INclientsock_in;

charreceiveBuf[100]={"0"};

charip_addr[16]={"127.0.0.1"};

WORDversionRequired;

WSADATAwsaData;

versionRequired=MAKEWORD(1,1);

err=WSAStartup(versionRequired,&wsaData);//協(xié)議庫的版本信息if(!err)

{

printf("客戶端嵌套字已經(jīng)打開!\n");

}

else

{

printf("客戶端的嵌套字打開失敗!\n");

return;//結(jié)束

}

clientSocket=socket(AF_INET,SOCK_STREAM,0);

printf("請輸入主機(jī)IP:\n");

scanf("%s",ip_addr);

//連接服務(wù)器

clientsock_in.sin_addr.S_un.S_addr=inet_addr(ip_addr);

clientsock_in.sin_family=AF_INET;

clientsock_in.sin_port=htons(6000);

connect(clientSocket,(SOCKADDR*)&clientsock_in,sizeof(SOCKADDR));//開始連接

recv(clientSocket,receiveBuf,101,0);

printf("%s\n",receiveBuf);

charpath[100]={"0"};

gets(path);

inti=0;

do

{

printf("請輸入文件地址:\n");

gets(path);

while(path[i]!='\0')

{

if(path[i]=='/')

path[i]='\\';

i++;

}

i=0;

if((fp=fopen(path,"rb"))==NULL)

{

i=1;

printf("文件未打開\n");

}

}while(i);

fseek(fp,0L,SEEK_END);

length=ftell(fp);

printf("待傳送文件大?。?d\n",length);

printf("文件已經(jīng)打開等待主機(jī)消息\n");

//得到主機(jī)開始傳送消息

recv(clientSocket,receiveBuf,101,0);

printf("%s\n",receiveBuf);

if(strcmp(receiveBuf,"開始傳送")==0)

{

//傳送文件長度

charsendBuf[20];

ltoa(length,sendBuf,10);

send(clientSocket,sendBuf,21,0);

fseek(fp,0L,SEEK_SET);

//傳送文件

longinty=0;

doublecent;

chartrans[SIZE];

while(!feof(fp))

{

fread(trans,1,SIZE,fp);

y=y+SIZE;

if(y<length)

{

cent=(double)y*100.0/(doub

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論