網絡通信的建立

4.1建立C\S模型的基本過程

服務器端:

#include<WinSock2.h>
#include<stdio.h>
//#include<iostream>
#pragma comment(lib,"ws2_32.lib") //需要增加ws_32.lib這個動態鏈接庫;

void main()
{
	//加載套接字
	WORD wVersionRequest;//指定加載套接字庫版本信息
	WSADATA wsaData;    //將加載的套接字庫版本信息保存在此結構體中
	int err;
	wVersionRequest=MAKEWORD(1,1);
	err=WSAStartup(wVersionRequest,&wsaData);
	//如果加載失敗,返回
	if(err!=0)
	{
		return;
	}
	//判斷版本信息
	if(LOBYTE(wsaData.wVersion)!=1||  //
		HIBYTE(wsaData.wVersion)!=1)
	{
		WSACleanup();
		return;
	}
	
	//創建套接字
	SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
	SOCKADDR_IN addSrv;
	addSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
	addSrv.sin_family=AF_INET;
	addSrv.sin_port=htons(6000);

	//綁定套接字
	bind(sockSrv,(SOCKADDR*)&addSrv,sizeof(SOCKADDR));
	//將套接字設置爲監聽模式
	listen(sockSrv,5);

	//創建保存客戶端信息的socket
	SOCKADDR_IN addrClient;
	int len=sizeof(SOCKADDR);
	while(1)
	{
		//等待客戶請求
		SOCKET sockConn=accept(sockSrv,     //用於返回對應本次連接的套接字
			(SOCKADDR *)&addrClient,&len);
		char sendBuff[100];
		sprintf(sendBuff,"this  %s is communication programme test",
			inet_ntoa(addrClient.sin_addr));
		//發送數據
		send(sockConn,sendBuff,strlen(sendBuff)+1,0);
		//接受數據
		char recvBuff[100];
		recv(sockConn,recvBuff,strlen(recvBuff)+1,0);
		//顯示數據
		printf("%s\n",recvBuff);
		closesocket(sockConn);
	}

}


 

客戶端:

include<stdio.h>
#include<WinSock2.h>
#pragma comment(lib,"ws2_32.lib") //需要增加ws_32.lib這個動態鏈接庫;
void main()
{
	//加載套接字庫
	WORD wVersionRequsted;
	WSADATA wsaData;
	int err;
	wVersionRequsted=MAKEWORD(1,1);
	err=WSAStartup(wVersionRequsted,&wsaData);
	if(err!=0)
	{
		return;
	}
	if(LOBYTE(wsaData.wVersion)!=1||
		HIBYTE(wsaData.wVersion)!=1)
	{
		WSACleanup();
		return;
	}
	//創建套接字
	SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
	SOCKADDR_IN addrClient;
	addrClient.sin_family=AF_INET;
	addrClient.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
	addrClient.sin_port=htons(6000);

	//向服務器發出請求;
	connect(sockClient,(SOCKADDR *)&addrClient,sizeof(SOCKADDR));
    
	//接受數據;
	char recvBuff[100];
	recv(sockClient,recvBuff,100,0);
	printf("%s\n",recvBuff);
	//發送數據;
	send(sockClient,"the data was recvived",strlen("the data was recvived")+1,0);
	//關閉套接字
	closesocket(sockClient);
	WSACleanup();
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章