91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

socket網絡編程--基于windows

發布時間:2020-07-19 22:01:22 來源:網絡 閱讀:871 作者:小格林 欄目:編程語言

一、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;
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

科尔| 仲巴县| 逊克县| 梨树县| 井陉县| 汶上县| 莎车县| 舟曲县| 珲春市| 平江县| 大邑县| 瑞昌市| 黎城县| 萨嘎县| 金川县| 江西省| 平陆县| 错那县| 准格尔旗| 山丹县| 鲁山县| 顺义区| 康马县| 长岛县| 佛冈县| 阳曲县| 宜宾县| 曲麻莱县| 新建县| 新化县| 高州市| 盐亭县| 岑溪市| 绿春县| 普定县| 儋州市| 广元市| 马鞍山市| 安化县| 周口市| 进贤县|