windows socket基礎

來源:互聯網
上載者:User

標籤:

本來想寫個聊天系統,暫時水平有限,不浪費時間,以後再補上吧

伺服器代碼:

#include <Winsock2.h>#include <stdio.h>#include <iostream>#pragma comment (lib, "ws2_32.lib")using namespace std;void main(){//windows特有 使用WSAStarup() 初始化通訊端庫。相當於分配網路資源 WSADATA wsaData;int err = WSAStartup(0x0101, &wsaData);if (err != 0 ){return;}//windows特有 設定網路程式庫的版本if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1){//windows 特有 對應的網路資源釋放WSACleanup();return;}//建立通訊端  AF_INET 代表IPV4   SOCK_STREAM socket類型  0指定協議類型 0預設IPPROTO_TCP tcp協議SOCKET sockServ = socket(AF_INET, SOCK_STREAM, 0);if (INVALID_SOCKET == sockServ){WSACleanup(); //這時候只是設定 socket參數 並沒有建立 所以不需要closeSocket(sock_id);return;}// 上面同linux  socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1SOCKADDR_IN addrServ;//ip地址設定為 INADDR_ANY,讓系統自動擷取本機地址addrServ.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //htonl 轉換ip地址格式的函數addrServ.sin_port = htons(6000);//設定連接埠號碼6000addrServ.sin_family = AF_INET; //IPV4//把地址組中特定的地址 賦值給socket err = bind(sockServ, (SOCKADDR*)&addrServ, sizeof(SOCKADDR));if (0 != err){WSACleanup();//這時候也沒有真正的建立socket 也是再設定必要的參數return;}//這時候真正建立了socket  監聽該socket  設定最大串連數量listen(sockServ, SOMAXCONN);//迴圈監聽用戶端請求 這裡將會儲存每個用戶端的資訊 比如ip 連接埠 SOCKADDR_IN addrClient;int len = sizeof(SOCKADDR);while(1){//接受用戶端請求 用戶端資訊放在addrClient 如果不關心 後面連個參數都可以設為NULL//阻塞直到有用戶端串連,不然多浪費CPU資源。  SOCKET sockConn = accept(sockServ, (SOCKADDR*)&addrClient, &len);char sendBuf[255];cin >> sendBuf ;//send 向用戶端發送資料send(sockConn, sendBuf, strlen(sendBuf) + 1, 0);char recvBuf[255];//接受用戶端傳來的資料 接受的資料寫入到recvBuf int nRecv = recv(sockConn, recvBuf, 255, 0);if (nRecv > 0){recvBuf[nRecv] = '\0';printf("%s\n", recvBuf);}if (strcmp(recvBuf, "88") == 0)closesocket(sockConn);}closesocket(sockServ);}

用戶端代碼:

#include <Winsock2.h>#include <stdio.h>#include <iostream>#pragma comment (lib, "ws2_32.lib")using namespace std;void main(){WSADATA wsaData;WORD wVersionRequested = MAKEWORD(1, 1); //佈建要求通訊端1.1版本int err = WSAStartup(wVersionRequested, &wsaData);if (err != 0)return;//檢查是否是1.1版本 不是返回if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1){WSACleanup();return;}//建立socket IPV4  socket type SOCK_STREAM  0代表預設TCP協議SOCKET sockConn = socket(AF_INET, SOCK_STREAM, 0);SOCKADDR_IN addrServ;addrServ.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//設定串連的地址addrServ.sin_family = AF_INET; //IPV4addrServ.sin_port = htons(6000); //設定串連的連接埠號碼while(1){//串連設定的伺服器connect(sockConn, (SOCKADDR *)&addrServ, sizeof(SOCKADDR));char recvBuf[255] ="\0";//接受伺服器發來的資料recv(sockConn, recvBuf, 255, 0);if (strcmp(recvBuf, "") != 0 )cout << recvBuf << endl;char sendBuf[255];cin >> sendBuf ;//向伺服器發送資料send(sockConn, sendBuf, strlen(sendBuf), 0);sendBuf[strlen(sendBuf)] = '\0';if (strcmp(sendBuf, "88") == 0 )break;}//關閉socket closesocket(sockConn);//釋放分配的網路資源WSACleanup();}




windows socket基礎

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.