傻瓜式Windows网络编程,客户端,服务端

服务端

//vc的第一套socket,第二套socket,可能存在冲突

#define WIN32_LEAN_AND_MEAN
#define _WINSOCK_DEPRECATED_NO_WARNINGS //也可以放到工程属性,预处理中

#include <windows.h>
#include <WinSock2.h>
#include <stdio.h>

#pragma comment(lib, "ws2_32.lib")

int main()
{
  //启动Windows socket 2.x环境
  WORD ver = MAKEWORD(2, 2);
  WSADATA dat;
  WSAStartup(ver, &dat);

  //--用Socket API建立简易TCP服务端
  //1.建立一个socket
  SOCKET _sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  //2 bind绑定用于接受客户端连接的网络端口
  sockaddr_in _sin = {};
  _sin.sin_family = AF_INET;
  _sin.sin_port = htons(4567);//host to net unsigned
  _sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
  //使用127.0.0.1可以防止外网访问
  //启用本机全部的ip地址可以使用,INADDR_ANY
  if (SOCKET_ERROR == bind(_sock, (sockaddr*)&_sin, sizeof(sockaddr_in)))
  {
    printf("错误,绑定网络端口失败...\n");
  }
  else
  {
    printf("绑定网络端口成功...\n");
  }
  //3 listen 监听网络端口
  if (SOCKET_ERROR == listen(_sock, 5))
  {
  printf("错误,监听网络端口失败...\n");
  }
  else
  {
    printf("监听网络端口成功...\n");
  }
  //4 accept等待接受客户端连接
  sockaddr_in clientAddr = {};
  int nAddrLen = sizeof(clientAddr);
  SOCKET _cSock = INVALID_SOCKET;
  char msgBuf[] = "Hello, i'm Server.";

  while (true)
  {
    _cSock = accept(_sock, (sockaddr*)&clientAddr, &nAddrLen);
    if (INVALID_SOCKET == _cSock)
    {
      printf("错误,接受到无效客户端socket...\n");
    }
    printf("新客户端加入:IP=%s\n", inet_ntoa(clientAddr.sin_addr));
    //5 send向客户端发送一条数据
    send(_cSock, msgBuf, strlen(msgBuf) + 1, 0);
  }

  //6 关闭套接字closesocket
  closesocket(_sock);


  //清除Windows socket环境
  WSACleanup();

  return 0;
}

客户端

#define WIN32_LEAN_AND_MEAN
#define _WINSOCK_DEPRECATED_NO_WARNINGS //也可以放到工程属性,预处理中

#include <windows.h>
#include <WinSock2.h>
#include <stdio.h>

#pragma comment(lib, "ws2_32.lib")

int main()
{

  //启动Windows socket 2.x环境
  WORD ver = MAKEWORD(2, 2);
  WSADATA dat;
  WSAStartup(ver, &dat);
  //---------------------------
  //--用Socket API建立简易TCP客户端
  //1 建立一个socket
  SOCKET _sock = INVALID_SOCKET;
  _sock = socket(AF_INET, SOCK_STREAM, 0);
  if (INVALID_SOCKET == _sock)
  {
    printf("错误,建立Socket失败...\n");
  }
  else
  {
    printf("建立Socket成功...\n");
  }
  //2 连接服务器connect
  sockaddr_in _sin = {};
  _sin.sin_family = AF_INET;
  _sin.sin_port = htons(4567);//host to net unsigned
  _sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
  int ret = connect(_sock, (sockaddr*)&_sin, sizeof(sockaddr_in));
  if (SOCKET_ERROR == ret)
  {
    printf("错误,连接服务端失败...\n");
  }
  else
  {
    printf("连接服务端成功...\n");
  }
  //3 接受服务器信息recv
  char recvBuf[256] = {};
  int nlen = recv(_sock, recvBuf, 256, 0);
  if (nlen > 0)
  {
    printf("接收到数据:%s\n", recvBuf);
  }

  //4 关闭套接字closesocket
  closesocket(_sock);

  //清除Windows socket环境
  WSACleanup();
  getchar();
  return 0;
}

上一篇:Java 安全之Weblogic 2017-3248分析


下一篇:python socket-tcp多人网络聊天室服务端(35行代码实现)