




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度青島市園林和林業(yè)局所屬事業(yè)單位青島市園林和林業(yè)綜合服務(wù)中心公開考前自測高頻考點(diǎn)模擬試題附答案詳解(黃金題型)
- 介紹名人的英語演講稿
- 2025年廣州數(shù)控編程試卷及答案
- 客車事故風(fēng)險(xiǎn)因子識別-洞察與解讀
- 2025年綏化市中考試卷及答案
- 2025年如何快速編輯題庫及答案
- 2025年通化市柳河縣中考沖刺卷數(shù)學(xué)試題含解析
- 2025年度福建省血液中心招聘6人考前自測高頻考點(diǎn)模擬試題及完整答案詳解
- 2025年天津市招聘社區(qū)工作者真題題庫及答案
- 中職語文(拓展模塊)中國科學(xué)技術(shù)史序言
- 子宮肌瘤教學(xué)查房
- 云南省昆明市2023-2024學(xué)年高一下學(xué)期7月期末質(zhì)量檢測英語試卷(含答案)
- DB2303T 021-2024柞蠶膿病防治技術(shù)規(guī)程
- 煤礦事故匯報(bào)程序
- 成人術(shù)后疼痛管理
- 師范生實(shí)習(xí)安全教育
- 高等數(shù)學(xué)(經(jīng)濟(jì)類)第5版課件:數(shù)列的極限
- 2025年上海市高考英語熱點(diǎn)復(fù)習(xí):六選四句子還原之說明文(上)
- 老年病人誤吸預(yù)防及護(hù)理
- 吉林地區(qū)普通高中2023-2024學(xué)年高三年級上學(xué)期數(shù)學(xué)第一次模擬試卷(含答案)
評論
0/150
提交評論