日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

socket傳輸文件的原理 socket實(shí)現(xiàn)文件傳輸

一、打開兩個(gè)VS2019 , 創(chuàng)建兩個(gè)控制臺(tái)程序分別命名為client和servers

socket傳輸文件的原理 socket實(shí)現(xiàn)文件傳輸


二、編寫服務(wù)端servers
1、包含頭文件及庫(kù)文件
#include <WinSock2.h>#pragma comment(lib,"ws2_32.lib")#pragma warning(disable:4996)2、初始化及反初始化代碼 , 記下來(lái)就行 , 永遠(yuǎn)不變
//初始化代碼 , 死記下來(lái)就行WORD wVersion = MAKEWORD(2, 2);WSADATA wsadata;if (WSAStartup(wVersion, &wsadata) != 0){return 0;}//反初始化操作WSACleanup();3、創(chuàng)建socket
SOCKET s= socket(AF_INET, SOCK_STREAM, 0);//第一個(gè)參數(shù)協(xié)議簇(AF_INET , ipv4;AF_INET6 , ipv6;AF_UNIX , 本機(jī)通信)//第二個(gè)參數(shù)類型(SOCK_STREAM , TCP流;SOCK_DGRAM , UDP數(shù)據(jù)報(bào);SOCK_RAW , 原始套接字)//第三個(gè)參數(shù)一般設(shè)置0 , 當(dāng)確定套接字使用的協(xié)議簇和類型時(shí) , 這個(gè)參數(shù)的值就為0if (s==INVALID_SOCKET){return 0;//創(chuàng)建套接字失敗}4、綁定端口并開啟監(jiān)聽
sockaddr_in add;int len = sizeof(sockaddr_in);add.sin_family = AF_INET;//協(xié)議簇add.sin_addr.S_un.S_addr = inet_addr("0.0.0.0");//表示接受任意ip地址add.sin_port = htons(11111);//網(wǎng)絡(luò)字節(jié)序是大尾方式 , 本地字節(jié)序是小尾方式 , 需要轉(zhuǎn)換int i = bind(s, (sockaddr*)&add, len);listen(s, 5);//瞬間來(lái)五個(gè)用戶5、等待客戶端連接
sockaddr_in caddr;caddr.sin_family = AF_INET;int caddrlen = sizeof(sockaddr_in);SOCKET sclient=accept(s,(sockaddr*)&caddr, &caddrlen);//重新產(chǎn)生一個(gè)socket用來(lái)通信if (sclient==INVALID_SOCKET){return 0;}6、發(fā)送數(shù)據(jù)并關(guān)閉連接
int ret = send(sclient, "哎呦", strlen("哎呦"), 0);closesocket(sclient);三、編寫客戶端
1、包含頭文件及庫(kù)文件
#include <WinSock2.h>#pragma comment(lib,"ws2_32.lib")#pragma warning(disable:4996)2、初始化及反初始化代碼 , 記下來(lái)就行 , 永遠(yuǎn)不變
//初始化代碼 , 死記下來(lái)就行WORD wVersion = MAKEWORD(2, 2);WSADATA wsadata;if (WSAStartup(wVersion, &wsadata) != 0){return 0;}//反初始化操作WSACleanup();3、創(chuàng)建socket
SOCKET s= socket(AF_INET, SOCK_STREAM, 0);//第一個(gè)參數(shù)協(xié)議簇(AF_INET , ipv4;AF_INET6 , ipv6;AF_UNIX , 本機(jī)通信)//第二個(gè)參數(shù)類型(SOCK_STREAM , TCP流;SOCK_DGRAM , UDP數(shù)據(jù)報(bào);SOCK_RAW , 原始套接字)//第三個(gè)參數(shù)一般設(shè)置0 , 當(dāng)確定套接字使用的協(xié)議簇和類型時(shí) , 這個(gè)參數(shù)的值就為0if (s==INVALID_SOCKET){return 0;//創(chuàng)建套接字失敗}sockaddr_in add;int len = sizeof(sockaddr_in);add.sin_family = AF_INET;//協(xié)議簇add.sin_addr.S_un.S_addr = inet_addr("192.168.1.107");//主動(dòng)連接該ip地址add.sin_port = htons(11111);//網(wǎng)絡(luò)字節(jié)序是大尾方式 , 本地字節(jié)序是小尾方式 , 需要轉(zhuǎn)換4、連接服務(wù)器
int i = connect(s, (sockaddr*)&add, len);if (SOCKET_ERROR==i){return 0;}5、接收服務(wù)器發(fā)送的數(shù)據(jù)并關(guān)閉連接
char sbuf[256] = { 0 };int ret = recv(s, sbuf, 256, 0);if (ret==0){return 0;//連接斷開}else if(ret>0){printf(sbuf);}closesocket(s);四、運(yùn)行結(jié)果

socket傳輸文件的原理 socket實(shí)現(xiàn)文件傳輸


五、小技巧
【socket傳輸文件的原理 socket實(shí)現(xiàn)文件傳輸】@err,hr 監(jiān)視輸入這個(gè)可以查看錯(cuò)誤信息

    推薦閱讀