資源描述:
《實驗一 Windows下Socket編程實現(xiàn)簡單通信》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、天津理工大學(xué)實驗報告學(xué)院(系)名稱:計算機與通信工程學(xué)院姓名劉琪琪學(xué)號20125871專業(yè)網(wǎng)絡(luò)工程班級1班實驗題目Windows下Socket編程實現(xiàn)簡單通信課程名稱網(wǎng)絡(luò)編程課程代碼實驗時間2015實驗地點7-219批改意見成績教師簽字:實驗Windows下Socket編程實現(xiàn)簡單通信一實驗?zāi)康脑趙indows環(huán)境下進行socket編程,實現(xiàn)兩臺主機間的簡單通信。二實驗環(huán)境搭載Windows7操作系統(tǒng)的PC機VC6.0編譯器三實驗內(nèi)容1,服務(wù)器、客戶端創(chuàng)建套接字2,客戶端發(fā)送連接請求3,服務(wù)器收到請求后打印連接成功消息四實驗報告要求1,有客戶端和
2、服務(wù)器的完整代碼2,實驗結(jié)果截圖3,Socket通信過程流程圖五部分源代碼及主要Socket函數(shù)參考1,注冊套接字函數(shù)socket(intaf,inttype,intprotocol)參數(shù)解釋:af:一個地址描述,目前只支持AF_INET格式,也就是說在本次實驗中此參數(shù)直接寫為AF_INET即可。type:指定socket類型,例如TCP類型(SOCK_STREAM)UDP類型(SOCK_DGRAM)protocol:套接口制訂協(xié)議類型可以為0,。常用類型有IPPROTO_TCP、IPPROTO_UDP等2,綁定套接字函數(shù)bind(SOCKETs
3、,conststructsockaddrFAR*addr,intnamelen);參數(shù)解釋:s:socket()函數(shù)返回的套接口描述字addr:指向Socket地址的指針namelen:該地址的長度3,監(jiān)聽函數(shù)listen(SOCKETs,intbacklog)參數(shù)解釋:s:socket()函數(shù)返回的套接口描述字backlog:等待連接隊列的最大長度4,接收連接函數(shù)accept(SOCKETs,structsockaddrFAR*addr,intFAR*addrlen)參數(shù)解釋:s:socket()函數(shù)返回的套接口描述字addr:(可選)指針,指
4、向一緩沖區(qū),其中接收為通訊層所知的連接實體的地址。addr參數(shù)的實際格式由套接口創(chuàng)建時所產(chǎn)生的地址族確定addrlen:(可選)指針,輸入?yún)?shù),配合addr一起使用,指向存有addr地址長度的整型數(shù)5,發(fā)送連接請求函數(shù)connect(SOCKETs,conststructcoskaddrFAR*name,intnamelen)s:socket()函數(shù)返回的套接口描述字name:想要進行連接的端口名namelen:名字長度客戶端:#include#include#include#includ
5、e#definePORTNUMBER333#pragmacomment(lib,"ws2_32.lib")#defineQueueLen6intvisits=0;intmain(intargc,char*argv[]){WORDversion;version=MAKEWORD(1,1);WSADATAwsa;if(0!=WSAStartup(version,&wsa)){//初始化socket()printf("WSAStartuperror!");exit(0);}//structhostent*ptrh;struc
6、tsockaddr_inservaddr;structsockaddr_inclientaddr;intlistenfd;intclientfd;intport;intalen;charbuf[1000];memset(&servaddr,0,sizeof(servaddr));//初始化servaddr為0servaddr.sin_family=AF_INET;//主機地址標(biāo)識的數(shù)據(jù)結(jié)構(gòu),使用TCP/IP協(xié)議servaddr.sin_addr.s_addr=INADDR_ANY;//32位的IP地址,網(wǎng)絡(luò)字節(jié)順序if(argc>1){port=
7、atoi(argv[1]);}else{port=PORTNUMBER;}if(port>0){servaddr.sin_port=htons((unsignedshort)port);//把端口轉(zhuǎn)換成網(wǎng)絡(luò)序}else{fprintf(stderr,"badportnumber%d",argv[1]);exit(0);}listenfd=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);//注冊一個socketdescriptionDWORDerror=GetLastError();if(listenfd<0){f
8、printf(stderr,"socketcreateionfailed!");exit(0);}if(bind(listenfd,