⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client_notes.c

📁 RIP协议所采用的UDP通信模块,该程序是UDP通信的客户端程序
💻 C
字号:
/****************************************************
*Windows环境下使用VC编写的TCP通信客户端程序
*在编译这个程序时,需要在工程设置项目--〉连接项目中添加如下两项:
*        Ws2_32.lib和Winmm.lib
*否则编译后链接生成可执行文件时会出错!
*客户端程序在单机内的测试运行方法:
* client 主机名 端口号
* 
*程序中的函数列表:
*int InitSockets(void): 插口(套接字)初始化
****************************************************/

#include <stdio.h>
#include <winsock2.h>

int InitSockets(void)
{
    WSADATA wsaData;
    WORD wVersionRequested;
    int err;
    /* Ask for Winsock 1.1 functionality */
    wVersionRequested = MAKEWORD( 1, 1 );
    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 ) {
      printf("Error %d: Winsock not available\n", err);
      return 1;
      }
    return 0;
}

#define WSA_ERROR(x)  { printf("Error %d: %s\n", \
    WSAGetLastError(), x); return 1; }
//void InitSockets(void);

main(int argc, char **argv)
{
    SOCKET sd_client;
    int err;
    u_short iPort;
    struct sockaddr_in addr_srv;
    struct hostent *ptrHost;
    char response[4096];
    char *pszHost;
    char *msg = "HELLO SERVER";

    if (argc == 3) {
      pszHost = argv[1];
      iPort = atoi(argv[2]);
      }
    else {
      printf("Usage:\t client1 [hostname] [portno]");
      return 1;
      }

    InitSockets();     //初始化socket
    sd_client = socket(PF_INET, SOCK_STREAM, 0);  //按参数要求申请的socket给sd_client
    if (sd_client == INVALID_SOCKET)   //检错
        WSA_ERROR("no more socket resources")
//输入了数字格式的主机名,则直接转换,否则通过gethostbyname获取主机IP
    if (atoi(pszHost)) {                 
        u_long ip_addr = inet_addr(pszHost);
        ptrHost = gethostbyaddr((char *)&ip_addr,
            sizeof(u_long), AF_INET);
        }
    else
        ptrHost = gethostbyname(pszHost);

    if (!ptrHost)
        WSA_ERROR("cannot resolve hostname")

    addr_srv.sin_family = PF_INET;
    memcpy((char *) &(addr_srv.sin_addr),
        ptrHost->h_addr,  ptrHost->h_length);
    addr_srv.sin_port = htons(iPort);
//向服务器发出连接请求
    err = connect(sd_client, (struct sockaddr *) &addr_srv,
        sizeof(addr_srv));
    if (err == INVALID_SOCKET)
        WSA_ERROR("cannot connect to server")

    printf("You are connected to the server\n");
//连接上后,向服务器发出服务请求
    send (sd_client, msg, strlen(msg)+1, 0);
    memset(response, 0, sizeof(response));
//接收服务器返回的服务信息
    recv(sd_client, response, sizeof(response), 0);
    printf("server says %s\n", response);
    closesocket(sd_client);
    WSACleanup();
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -