第一個服務器/客戶端模型(非多線程)

服務器:

#include "stdafx.h"
#include <iostream>
#include "winsock2.h"
#pragma comment (lib, "ws2_32.lib")

int _tmain(int argc, _TCHAR* argv[])
{
	WSADATA wsaData;
	SOCKET sockfd,sockfd1;

	if(WSAStartup(MAKEWORD(2,2),&wsaData)<0)
	{
		printf("WSAStartup failed\n");
		return 1;
	}
   else
   {
	   printf("WSAStartup successed!\n");
   }


   sockfd=socket(AF_INET,SOCK_STREAM,0);
   if(sockfd==SOCKET_ERROR)
   {
	   printf("套接口創建失敗!");
	   WSACleanup();
	   return 1;
   }
   else
   {
	   printf("a new socket has been created!\n");
	   printf("the socket id is %d\n",sockfd);
   }

   struct sockaddr_in addr;
   int addr_len=sizeof(struct sockaddr_in);
   addr.sin_family=AF_INET;
   addr.sin_port=htons(8888);
   addr.sin_addr.s_addr=INADDR_ANY;
     
   if(bind(sockfd,(SOCKADDR *)&addr, sizeof(addr))<0)
   {
	   printf("bind error!");
	   return 1;
   }
   else
   {
	   printf("bind ok!");

   }
   listen(sockfd,5);
   /*SOCKET TempSock=SOCKET_ERROR;
   while(TempSock==SOCKET_ERROR)
   {
	   std::cout<<"服務器:正在等待來自客戶機的連接...\r\n";
     TempSock=accept(sockfd,NULL,NULL);
   }
   sockfd=TempSock;
   std::cout<<"服務器:有客戶機到達!\r\n\r\n";*/
   int len=sizeof(addr);
   sockfd1=accept(sockfd,(SOCKADDR*)&addr,&len);
   char *szMessage="服務器說:有朋自遠方來,不亦悅乎。\r\n";
   send(sockfd1,szMessage,strlen(szMessage),0);
   shutdown(sockfd,SD_SEND);
   closesocket(sockfd);
   WSACleanup();
   system("PAUSE");
   return 0;
}

客戶機:

#include <iostream>
#include "winsock2.h"
#pragma comment (lib, "ws2_32.lib")

int _tmain(int argc, _TCHAR* argv[])
{
	WSADATA wsaData;
	SOCKET sockfd;

	if(WSAStartup(MAKEWORD(2,2),&wsaData)<0)
	{
		printf("WSAStartup failed\n");
		return 1;
	}
   else   printf("WSAStartup successed!\n");
  

   sockfd=socket(AF_INET,SOCK_STREAM,0);

   if(sockfd==SOCKET_ERROR)
   {
	   printf("套接口創建失敗!");
	   WSACleanup();
	   return 1;
   }
   else
   {
	   printf("a new socket has been created!\n");
	   printf("the socket id is %d\n",sockfd);
   }


   struct sockaddr_in addr;
   int addr_len=sizeof(struct sockaddr_in);
   addr.sin_family=AF_INET;
   addr.sin_port=htons(8888);
   addr.sin_addr.s_addr=inet_addr("127.0.0.1");

   printf("the ip address of the server is: %s\n",inet_ntoa(addr.sin_addr));
     
   if(connect(sockfd,(SOCKADDR *)&addr, sizeof(addr))<0)
   {
	   printf("connect error!\n");
	   return 1;
   }
   else
   {
	   printf("connected ok!\n");

   }
  
   char buffer[1024];
   memset(buffer, 0,1023);
   int inDataLength=recv(sockfd, buffer,1024,0);
   std::cout<<buffer;

   shutdown(sockfd,SD_SEND);
   closesocket(sockfd);
   WSACleanup();
   return 0;
}


發佈了55 篇原創文章 · 獲贊 45 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章