socket網路編程--基於windows

來源:互聯網
上載者:User

標籤:網路   stl   inf   串連   oid   family   eth   seve   out   

一、socket編程

先運行伺服器,本文採用線程來運行伺服器,再運行用戶端。

二、基本概念

ip:可唯一標識網路上的一個主機;

協議+連接埠:可唯一標識主機中一個進程;

所以通過IP+協議+連接埠三元組來標識主機中的進程。

三、編程實現

#pragma once#define WIN32#include<iostream>#include<stdio.h>#include "stdafx.h"#include<sys/types.h>#include<WS2tcpip.h>#pragma comment(lib, "ws2_32.lib")using namespace std;//typedef int(*DLLFunc)(int,int);//int是該方法形參的類型,有幾個參數就定義幾個。//typedef int(*DLLFunc2)();DWORD WINAPI ThreadFunc(HANDLE Thread){//HINSTANCE hInstLibrary = LoadLibrary(_T("E:\\V3.0\\建立檔案夾\\MyDll.dll"));//要寫清楚路徑,注意雙斜杠//if (GetLastError() != 0)//{//std::cout << GetLastError();//列印失敗資訊//}//if (hInstLibrary == NULL)//{//FreeLibrary(hInstLibrary);//return 0;//}//DLLFunc2 dllFunc3;//dllFunc3 = (DLLFunc2)GetProcAddress(hInstLibrary, "SocketSevert");//int i3 = dllFunc3();//cout << i3 << endl;//FreeLibrary(hInstLibrary);//伺服器端  0成功;22通訊端;3綁定;4監聽WORD sockVersion = MAKEWORD(2, 2);WSADATA wsaData;if (WSAStartup(sockVersion, &wsaData) != 0){printf("-3");//return -3;}// 建立通訊端點:通訊端int sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd < 0){printf("伺服器建立通訊端失敗!\n");}else{printf("伺服器建立通訊端成功!\n");}struct sockaddr_in my_addr;my_addr.sin_family = AF_INET;my_addr.sin_port = htons(8888);my_addr.sin_addr.s_addr = htonl(INADDR_ANY);//綁定int err_log = bind(sockfd, (struct sockaddr*)&my_addr, sizeof(my_addr));if (err_log != 0){printf("伺服器綁定失敗!\n");}else{printf("伺服器綁定成功!\n");}//監聽err_log = listen(sockfd, 10);if (err_log != 0){printf("伺服器監聽失敗!\n");}else{printf("伺服器監聽成功!\n");}Sleep(10);int i = 0;while (1){i++;struct sockaddr_in client_addr;char cli_ip[INET_ADDRSTRLEN] = "";socklen_t cliaddr_len = sizeof(client_addr);//成功返回一個新的socket檔案描述符,用於和用戶端通訊,失敗返回-1//表示三方握手完成,下一步伺服器調用accept()接受串連int connfd = accept(sockfd, (struct sockaddr*)&client_addr, &cliaddr_len);if (connfd < 0){printf("accept第%d次失敗\n",i);continue;}else{printf("accept第%d次成功\n", i);}//接收資料char recv_buf[512] = { 0 };while (recv(connfd, recv_buf, sizeof(recv_buf), 0) > 0){i = sizeof(recv_buf);while (i--)printf("接收資料:\n%c\n",recv_buf[i]);}}return 0;}int main(){//DLLFunc2 dllFunc2;//// hdll=LoadLibraryEx("*.dll", NULL, LOAD_WITH_ALTERED_SEARCH_PATH),若dll庫中有其他dll的調用,就使用此語句//HINSTANCE hInstLibrary = LoadLibrary(_T("E:\\V3.0\\建立檔案夾\\MyDll.dll"));//要寫清楚路徑,注意雙斜杠//if (GetLastError() != 0)//{//std::cout << GetLastError();//列印失敗資訊//}//if (hInstLibrary == NULL)//{//FreeLibrary(hInstLibrary);//return 0;//}//線程---伺服器HANDLE Thread;DWORD dwThreadId;Thread = ::CreateThread(NULL, 0, ThreadFunc, NULL, 0, &dwThreadId);//cout << "The new thread ID is :" << dwThreadId << endl;//用戶端WORD sockVersion = MAKEWORD(2, 2);WSADATA wsaData;if (WSAStartup(sockVersion, &wsaData) != 0){return -1;}SOCKET sockClient = NULL;SOCKADDR_IN addrSrv;//addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");inet_pton(AF_INET, "128.0.0.1", (void*)&addrSrv.sin_addr.S_un.S_addr);addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(8888);//建立通訊端sockClient = socket(AF_INET, SOCK_STREAM, 0);if (sockClient < 0){printf("建立通訊端失敗!\n");}else{printf("建立通訊端成功!\n");}//網路連接if (connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)) == SOCKET_ERROR){printf("connect失敗!\n");}else{printf("網路連接成功!\n");char send_buf[12] = { 'c','d' };int nRecv = ::send(sockClient, send_buf, sizeof(send_buf), 0);if (nRecv < 0){printf("發送失敗!\n");}else{printf("發送成功!\n");}}//SocketConnect是DLL庫裡定義的方法//dllFunc2 = (DLLFunc2)GetProcAddress(hInstLibrary, "SocketConnect");//if (dllFunc2 == NULL)//{//FreeLibrary(hInstLibrary);//return 0;//}//int i2 = dllFunc2();//cout << i2 << endl;//FreeLibrary(hInstLibrary);::WaitForSingleObject(Thread, INFINITE);::CloseHandle(Thread);return 0;}


socket網路編程--基於windows

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.