zoukankan      html  css  js  c++  java
  • TCP Socket 通讯(客户端与服务端)

    /*----------------------------编译环境:VS2015---------------------------------------*/

    /*-----------------------------Author:刘收获-------------------------------------------*/

    //Sever端口

    // ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include <WinSock2.h>
    #include <iostream>
    #include <Windows.h>
    #define PORT 8087
    #define SERVER_IP "127.0.0.1"
    #define BUFFER_SIZE 1024
    #define MESSAGE_MAX_SIZE 512
    #pragma comment(lib, "WS2_32") //动态库的静态加载

    using namespace std;

    int main()
    {
    //初始化网卡
    sockaddr_in server_addr;
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.S_un.S_addr = INADDR_ANY;
    server_addr.sin_port = htons(PORT);

    // 初始化socket dll
    WSADATA wsaData;
    WORD socketVersion = MAKEWORD(2, 0);
    if (WSAStartup(socketVersion, &wsaData) != 0)
    {

    printf("Init socket dll error!");
    exit(1);

    }

    // 创建socket
    SOCKET m_Socket = socket(AF_INET, SOCK_STREAM, 0);
    if (SOCKET_ERROR == m_Socket)
    {

    printf("Create Socket Error!");
    exit(1);

    }

    //绑定socket和服务端(本地)地址
    if (SOCKET_ERROR == bind(m_Socket, (LPSOCKADDR)&server_addr, sizeof(server_addr)))
    {

    printf("Server Bind Failed: %d", WSAGetLastError());
    exit(1);

    }

    //监听
    if (SOCKET_ERROR == listen(m_Socket, 10))
    {

    printf("Server Listen Failed: %d", WSAGetLastError()); //失败
    exit(1);

    }

    while (1) //等待客户端连接
    {

    printf("Listening To Client. ");
    sockaddr_in client_addr;
    int client_addr_len = sizeof(client_addr);
    SOCKET m_New_Socket = accept(m_Socket, (sockaddr *)&client_addr, &client_addr_len);
    if (SOCKET_ERROR == m_New_Socket)
    {

    printf("Server Accept Failed: %d", WSAGetLastError());
    break;

    }
    char buffer[BUFFER_SIZE];
    memset(buffer, 0, BUFFER_SIZE);
    if (recv(m_New_Socket, buffer, BUFFER_SIZE, 0) < 0)
    {

    printf("Server Receive Data Failed!");
    break;

    }
    char message[MESSAGE_MAX_SIZE + 1];
    memset(message, 0, MESSAGE_MAX_SIZE + 1);
    strncpy_s(message, buffer, strlen(buffer)>MESSAGE_MAX_SIZE ? MESSAGE_MAX_SIZE : strlen(buffer));
    printf("%s ", message);

    closesocket(m_New_Socket);

    }
    closesocket(m_Socket);
    //释放winsock库
    WSACleanup();

    return 0;
    }

    //Client端

    // ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include <WinSock2.h>
    #include <WS2tcpip.h>
    #include <iostream>
    #include <Windows.h>
    #define PORT 8087
    #define SERVER_IP "127.0.0.1"
    #define BUFFER_SIZE 1024
    #define MESSAGE_MAX_SIZE 512
    #pragma comment(lib, "WS2_32") //动态库的静态加载
    #define _WINSOCK_DEPRECATED_NO_WARNINGS
    using namespace std;

    int main()
    {
    // 初始化socket dll
    WSADATA wsaData;
    WORD socketVersion = MAKEWORD(2, 0);
    if (WSAStartup(socketVersion, &wsaData) != 0)
    {

    printf("Init socket dll error!");
    exit(1);

    }

    //创建socket
    SOCKET c_Socket = socket(AF_INET, SOCK_STREAM, 0);
    if (SOCKET_ERROR == c_Socket)
    {

    printf("Create Socket Error!");
    system("pause");
    exit(1);

    }

    //指定服务端的地址
    sockaddr_in server_addr;
    server_addr.sin_family = AF_INET;
    // server_addr.sin_addr.S_un.S_addr = inet_addr(SERVER_IP);
    inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr.S_un.S_addr); 
    server_addr.sin_port = htons(PORT);

    if (SOCKET_ERROR == connect(c_Socket, (LPSOCKADDR)&server_addr, sizeof(server_addr)))
    {

    printf("Can Not Connect To Server IP! ");
    system("pause");
    exit(1);

    }
    //输入文件名
    char message[MESSAGE_MAX_SIZE + 1];
    memset(message, 0, MESSAGE_MAX_SIZE + 1);
    printf("Please Input Message To Server: ");
    char c;
    int i = 0;
    c = getchar();
    while (c != '#')
    {

    message[i] = c;
    i++;
    c = getchar();

    }

    char buffer[BUFFER_SIZE];
    memset(buffer, 0, BUFFER_SIZE);
    strncpy_s(buffer, message, strlen(message)>BUFFER_SIZE ? BUFFER_SIZE : strlen(message));

    //向服务器发送消息
    if (send(c_Socket, buffer, BUFFER_SIZE, 0) < 0)
    {

    printf("Send Message Failed ");
    system("pause");
    exit(1);

    }
    closesocket(c_Socket);
    //释放winsock库
    WSACleanup();
    return 0;
    }

  • 相关阅读:
    Linux(Contos7.5)环境搭建之JDK1.8安装(二)
    python微信域名或者链接批量检测
    表单设计器3-查询面板
    表单设计器2-表格布局
    表单设计器1-基本操作
    信息无障碍国内标准
    信息无障碍国际标准
    信息无障碍服务对象
    信息无障碍定义
    E8.Net工作流开发问题
  • 原文地址:https://www.cnblogs.com/lsh123/p/5932021.html
Copyright © 2011-2022 走看看