//Server.cpp   
#include   
#include   
#include   
#pragma comment(lib, "ws2_32.lib");   
#define PORT 5000   
  
void main()   
{   
  int port = PORT;   
  WSADATA wsaData;   
  SOCKET sListen, sAccept;   
  
  int iLen;   
  int iSend;   
  char buf[] = "hello, how are you";   
  struct sockaddr_in serv,cliet;   
  
  if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0)//启动命令   
  {   
    printf("Winsock load failed\n");   
    return;   
  }   
  
  sListen = socket(AF_INET, SOCK_STREAM, 0);//建立套接字   
  if (sListen == INVALID_SOCKET)   
  {   
    printf("socket failed:d%\n",WSAGetLastError());   
    return;   
  }   
  
  serv.sin_family = AF_INET;   
  serv.sin_port = htons(port);//设置端口   
  
  //serv.sin_addr.s_addr = htonl(INADDR_ANY);   
  serv.sin_addr.s_addr = inet_addr("127.0.0.1");   
  
  if (bind(sListen, (LPSOCKADDR)&serv, sizeof(serv)) == SOCKET_ERROR)//绑定   
  {   
    printf("bind()failed:%d\n", WSAGetLastError());   
    return;   
  }   
  
  if (listen(sListen, 5) == SOCKET_ERROR)   
  {   
    printf("listen()failed:d%\n", WSAGetLastError());   
    return;   
  }   
  
  iLen = sizeof (cliet);   
  
  while (1)   
  {   
     sAccept = accept(sListen, (sockaddr*)&cliet, &iLen);   
     if (sAccept == INVALID_SOCKET)   
     {   
        printf("accept()failed:d%\n", WSAGetLastError());   
        break;   
     }   
  
     //获得客户端的ip和端口   
     printf("获得客户端的ip和端口\n");   
     printf("accepted client IP:[%s],port:[%d]\n", inet_ntoa(cliet.sin_addr),ntohs(cliet.sin_port));   
  
     iSend = send(sAccept, buf, sizeof(buf), 0);//把buf中的内容发送出去   
     if (iSend == SOCKET_ERROR)   
     {   
        printf("send()failed:%d\n", WSAGetLastError());   
        break;   
     }   
     else if(iSend == 0)   
        break;   
     else   
     {   
         printf("客户端发送出的字节数\n");   
         printf("send() byte:%d\n", send);   
     }   
     closesocket(sAccept);   
  }   
  closesocket(sListen);   
  WSACleanup();   
}  

#########################################################

//Client.cpp   
#include   
#include   
  
#pragma comment(lib, "ws2_32.lib");   
  
#define PORT 5000   
#define BUFFER 1024   
  
int main(int argc,char* argv[])   
{   
  WSADATA wsaData;   
  SOCKET client;   
  
  int port = PORT;   
     
  int iLen;   
  char buf[BUFFER];   
     
  struct sockaddr_in serv;   
  memset(buf, 0, sizeof(buf));   
  
  if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0)   
  {   
    printf("Winsock load failed\n");   
    return 0;   
  }   
  
  serv.sin_family = AF_INET;   
  serv.sin_port = htons(port);   
  //serv.sin_addr.s_addr = inet_addr(argv[1]);   
  serv.sin_addr.s_addr = inet_addr("127.0.0.1");   
  
  client = socket(AF_INET, SOCK_STREAM, 0);   
  
  if (client == INVALID_SOCKET)   
  {   
    printf("socket()failed:%d\n", WSAGetLastError());   
    return 0;   
  }   
  
  if (connect(client, (struct sockaddr*)&serv, sizeof(serv)) == INVALID_SOCKET)   
  {   
      //提示链接失败   
      printf("connect()failed:%d\n", WSAGetLastError());   
      return 0;   
  }   
  else//链接则接收数据   
  {   
    iLen = recv(client, buf, sizeof(buf), 0);   
    if (iLen == 0)   
        return 0;   
    else if (iLen == SOCKET_ERROR)   
    {   
        printf("recv()failed:%d\n", WSAGetLastError());   
        return 0;   
    }   
    printf("recv() data from server:%s\n", buf);   
  }   
  
  closesocket(client);   
  WSACleanup();   
  
  printf("press any key to continue");   
  while(1){};   
}