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

📄 tcpclient.c

📁 这是我上期在TORNADO下写的基于VXWORKS嵌入式操作系统的TCP/IP通信程序的源代码
💻 C
字号:
/* tcpClient.c - TCP client example */  
/*TcpServer是下载到Client端的程序,其完成的功能是建立连接,通过套节字进行数据传输,传输的数据包括信息,是否回应。出错,返回错误信息*/
#include "vxWorks.h" 
#include "sockLib.h" 
#include "inetLib.h" 
#include "stdioLib.h" 
#include "strLib.h" 
#include "hostLib.h" 
#include "ioLib.h" 
#include "tcp.h"  

STATUS tcpClient ( char *    serverName  )    /* Server机的IP地址 */ 
    { 
    struct request      myRequest; /*定义的结构体,保存信息和回复请求以及信息长度 */ 
    struct sockaddr_in  serverAddr;    /* server端的套节字地址 */ 
    char             replyBuf[REPLY_MSG_SIZE]; /* 保存回复信息的数组*/ 
    char             reply;         /*回复请求 */ 
    int              sockAddrSize;  /* server端的套节字地址结构体的长度*/ 
    int              sFd;           /*保存套节字的设备*/ 
    int              mlen;          /*信息长度 */ 

    /* 建立套节字,用于在两机之间进行数据传输*/ 
    if ((sFd = socket (AF_INET, SOCK_STREAM, 0)) == ERROR) 
    { 
        perror ("socket setup error!\n"); 
        return (ERROR); 
    }  /*套节字建立失败,返回错误信息*/
    
    sockAddrSize = sizeof (struct sockaddr_in); 
    bzero ((char *) &serverAddr, sockAddrSize); 
    serverAddr.sin_family = AF_INET; 
    serverAddr.sin_len = (u_char) sockAddrSize; 
    serverAddr.sin_port = htons (SERVER_PORT_NUM); 

    if (((serverAddr.sin_addr.s_addr = inet_addr (serverName)) == ERROR) && 
        ((serverAddr.sin_addr.s_addr = hostGetByName (serverName)) == ERROR)) 
        { 
        perror ("unknown server name"); 
        close (sFd); 
        return (ERROR); 
        } /*服务端不存在,返回错误信息*/
    if (connect (sFd, (struct sockaddr *) &serverAddr, sockAddrSize) == ERROR) 
        { 
        perror ("connect"); 
        close (sFd); 
        return (ERROR); 
        } /*连接客户机与目标机,如果失败返回错误信息*/

    printf ("\n\nPlease input the message to send: \n"); 
    mlen = read (STD_IN, myRequest.message, REQUEST_MSG_SIZE); /*从输入设备检测保存到myRequest.message中*/
    myRequest.msgLen = mlen; 
    myRequest.message[mlen - 1] = '\0'; 
    
    ioctl(STD_IN,FIOFLUSH,NULL);
    printf("your message:%s\n",myRequest.message);
    //ioctl(STD_OUT,FIOFLUSH,NULL);
    printf ("Would you like a reply (Y or N): \n"); 
    read (STD_IN, &reply, 1); /*从输入设备检测是否要求服务器端回应*/
    ioctl(STD_IN,FIOFLUSH,NULL);
    switch (reply) 
    { 
        case 'y': 
        case 'Y': myRequest.reply = TRUE; 
            break; 
        default: myRequest.reply = FALSE; 
            break; 
    } /*如果输入Y或y则myRequest.reply = TRUE,反之为FALSE*/

    if (write (sFd, (char *) &myRequest, sizeof (myRequest)) == ERROR) 
    { 
        perror ("write"); 
        close (sFd); 
        return (ERROR); 
    } /*将message和reply保存到sFd中*/
/*以上过程完成将数据传到服务器端*/

    if (myRequest.reply)        /* if expecting reply, read and display it */  
    { 
        if (read (sFd, replyBuf, REPLY_MSG_SIZE) < 0) 
            { 
            perror ("read reply error!\n"); 
            close (sFd); 
            return (ERROR); 
            }/*如果服务器端接收到数据,执行下一句,反之报错*/
        printf ("MESSAGE FROM SERVER:\n%s\n", replyBuf); 
    }
    close (sFd); 
    return (OK); 
}

⌨️ 快捷键说明

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