socket實現文件傳輸:socket傳輸文件的原理

一、打開兩個VS2019,創建兩個控制台程序分別命名為client和servers

C++實現Socket連接通信

二、編寫服務端servers

1、包含頭文件及庫文件

#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#pragma warning(disable:4996)

2、初始化及反初始化代碼,記下來就行,永遠不變

//初始化代碼,死記下來就行
       WORD wVersion = MAKEWORD(2, 2);
       WSADATA wsadata;
       if (WSAStartup(wVersion, &wsadata) != 0)
       {
              return 0;
       }
       //反初始化操作
       WSACleanup();

3、創建socket

SOCKET s= socket(AF_INET, SOCK_STREAM, 0);
       //第一個參數協議簇(AF_INET,ipv4;AF_INET6,ipv6;AF_UNIX,本機通信)
       //第二個參數類型(SOCK_STREAM,TCP流;SOCK_DGRAM,UDP數據報;SOCK_RAW,原始套接字)
       //第三個參數一般設置0,當確定套接字使用的協議簇和類型時,這個參數的值就為0      
       if (s==INVALID_SOCKET)
       {
              return 0;//創建套接字失敗
       }

4、綁定埠並開啟監聽

sockaddr_in add;
       int len = sizeof(sockaddr_in);
       add.sin_family = AF_INET;//協議簇
       add.sin_addr.S_un.S_addr = inet_addr("0.0.0.0");//表示接受任意ip地址
       add.sin_port = htons(11111);//網路位元組序是大尾方式,本地位元組序是小尾方式,需要轉換
       int i = bind(s, (sockaddr*)&add, len);
       listen(s, 5);//瞬間來五個用戶

5、等待客戶端連接

sockaddr_in caddr;
       caddr.sin_family = AF_INET;
       int caddrlen = sizeof(sockaddr_in);
       
       SOCKET sclient=accept(s,(sockaddr*)&caddr, &caddrlen);//重新產生一個socket用來通信
       if (sclient==INVALID_SOCKET)
       {
              return 0;
       }

6、發送數據並關閉連接

int ret = send(sclient, "哎呦", strlen("哎呦"), 0);
       closesocket(sclient);

三、編寫客戶端

1、包含頭文件及庫文件

#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#pragma warning(disable:4996)

2、初始化及反初始化代碼,記下來就行,永遠不變

//初始化代碼,死記下來就行
       WORD wVersion = MAKEWORD(2, 2);
       WSADATA wsadata;
       if (WSAStartup(wVersion, &wsadata) != 0)
       {
              return 0;
       }
       //反初始化操作
       WSACleanup();

3、創建socket

SOCKET s= socket(AF_INET, SOCK_STREAM, 0);
       //第一個參數協議簇(AF_INET,ipv4;AF_INET6,ipv6;AF_UNIX,本機通信)
       //第二個參數類型(SOCK_STREAM,TCP流;SOCK_DGRAM,UDP數據報;SOCK_RAW,原始套接字)
       //第三個參數一般設置0,當確定套接字使用的協議簇和類型時,這個參數的值就為0      
       if (s==INVALID_SOCKET)
       {
              return 0;//創建套接字失敗
       }
sockaddr_in add;
       int len = sizeof(sockaddr_in);
       add.sin_family = AF_INET;//協議簇
       add.sin_addr.S_un.S_addr = inet_addr("192.168.1.107");//主動連接該ip地址
       add.sin_port = htons(11111);//網路位元組序是大尾方式,本地位元組序是小尾方式,需要轉換

4、連接伺服器

int i = connect(s, (sockaddr*)&add, len);
       if (SOCKET_ERROR==i)
       {
              return 0;
       }

5、接收伺服器發送的數據並關閉連接

char sbuf[256] = { 0 };
       int ret = recv(s, sbuf, 256, 0);
       if (ret==0)
       {
              return 0;//連接斷開
       }
       else if(ret>0)
       {
              printf(sbuf);
       }
       
       closesocket(s);

四、運行結果

C++實現Socket連接通信

五、小技巧

@err,hr 監視輸入這個可以查看錯誤信息

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/225485.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 14:44
下一篇 2024-12-09 14:44

相關推薦

發表回復

登錄後才能評論