国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

C++網(wǎng)絡(luò)編程基礎(chǔ)代碼(客戶端)--基于TCP協(xié)議

2019-11-08 03:26:01
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
//網(wǎng)絡(luò)編程客戶端//1:加載套接字庫(kù),創(chuàng)建套接字(WSAStartup() / socket());//2:向服務(wù)器發(fā)出連接請(qǐng)求(connect());//3:和服務(wù)器端進(jìn)行通信(send() / recv());//4:關(guān)閉套接字,關(guān)閉加載的套接字庫(kù)(closesocket() / WSACleanup())。#include <WinSock2.h>#include <stdio.h>#include <string.h>#include <iostream>#PRagma comment(lib,"ws2_32.lib")int main(){	WSADATA wsaData;	char Buff[1024] = {};	//判斷是否可以使用window的網(wǎng)絡(luò)編程庫(kù),初始化sock資源	if (WSAStartup(MAKEWord(2,2),&wsaData) != 0)	{		printf("Failed to load Winsock");		return 0;	}	//套接字接口結(jié)構(gòu)	SOCKADDR_IN	addrSrv;	addrSrv.sin_family = AF_INET;	addrSrv.sin_port = htons(5099);	//和服務(wù)器定好的端口號(hào)一樣	addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");			//服務(wù)器地址,這是默認(rèn)服務(wù)器在本機(jī)																	//inet_addr函數(shù)是舊函數(shù)庫(kù)的函數(shù),編譯時(shí)會(huì)報(bào)錯(cuò),解決辦法,打開(kāi)項(xiàng)目->屬性->配置屬性->c/c++ ->SDL檢測(cè)   將是改為否	//創(chuàng)建套接字接口	SOCKET	sockClient = socket(AF_INET, SOCK_STREAM, 0);	if (SOCKET_ERROR == sockClient)	{		printf("Socket() error");		return 0;	}	//和服務(wù)器建立連接	//connect函數(shù)	//#include <sys/socket.h>	//int connect(int sockfd, const struct sockaddr* servaddr, socklen_t addrlen); // 返回:成功為0,出錯(cuò)-1	//TCP客戶用connect函數(shù)來(lái)建立一個(gè)與TCP服務(wù)器連接,sockfd是由socket函數(shù)返回的套接字描述符,第二個(gè)、第三個(gè)參數(shù)分別是指向一個(gè)套接字地址結(jié)構(gòu)的指針和該結(jié)構(gòu)的大小,	//套接字結(jié)構(gòu)必須含有服務(wù)器的ip地址和端口號(hào)。注意:如果connect失敗后,就必須close當(dāng)前的套接字描述符并重新調(diào)用socket。	//客戶端在調(diào)用connect前不必非得調(diào)用bind函數(shù)(比如UDP客戶端編程中一般就不用調(diào)用bind),內(nèi)核會(huì)確定源IP地址,并選擇一個(gè)臨時(shí)端口作為源端口。	//如果是TCP套接字,調(diào)用connect函數(shù)將激發(fā)TCP的三次握手過(guò)程,而且僅在連接建立成功或出錯(cuò)時(shí)才返回。注意:connect是在接收到服務(wù)端響應(yīng)的SYN + ACK時(shí)的返回的,	//也就是三次握手的第二次動(dòng)作之后。	//UDP是可以調(diào)用connect函數(shù)的,但是UDP的connect函數(shù)和TCP的connect函數(shù)調(diào)用確是大相徑庭的,這里沒(méi)有三次握手過(guò)程。	//內(nèi)核只是檢查是否存在立即可知的錯(cuò)誤(比如目的地址不可達(dá)),記錄對(duì)端的IP和端口號(hào),然后立即返回調(diào)用進(jìn)程。	//使用了connect的UDP編程就可不必使用sendto函數(shù)了,直接使用write / read即可。	if (connect(sockClient,(struct sockaddr*)&addrSrv,sizeof(addrSrv)) == INVALID_SOCKET)	{		printf("Connect() error");		return 0;	}	else	{		//接收數(shù)據(jù)		recv(sockClient, Buff, sizeof(Buff), 0);		printf("%s/n", Buff);	}	//發(fā)送數(shù)據(jù)	char buff[] = "This is Client Message";	send(sockClient, buff, sizeof(buff), 0);	closesocket(sockClient);	WSACleanup();	system("pause");	return 0;}
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 富源县| 贵溪市| 松江区| 万盛区| 张家口市| 连城县| 金山区| 姚安县| 胶州市| 德钦县| 定兴县| 磐安县| 信丰县| 河津市| 抚顺县| 石楼县| 怀远县| 襄汾县| 玛沁县| 连平县| 新安县| 沙河市| 筠连县| 黄石市| 溧水县| 潍坊市| 百色市| 伊吾县| 扎鲁特旗| 佛冈县| 井冈山市| 正镶白旗| 会同县| 乐陵市| 鱼台县| 台南市| 安义县| 怀宁县| 贵溪市| 抚州市| 怀宁县|