sample8clnt.c

来自「用CVI实现的TCP/IP数据传输」· C语言 代码 · 共 146 行

C
146
字号
#include <cvirte.h>    /* Needed if linking in external compiler; harmless otherwise */
#include <stdio.h>
#include <stdlib.h>
#include <tcpsupp.h>
#include <string.h>
#include <utility.h>
#include <userint.h>

#include "sample8clnt.h"

int CVICALLBACK ClientCallback(unsigned handle, int event, int error, void *callbackData);

int         panelHandle;
unsigned    covHandle;

int main (int argc, char *argv[])
{
    char        serverName[256];
    char        portNumString[32];
    char        buffer[512];
    int         portNumber;
    int         h, ctrl;
    unsigned    handle;

    if (InitCVIRTE (0, argv, 0) == 0)    /* Needed if linking in external compiler; harmless otherwise */
        return -1;    /* out of memory */
    
    DisableBreakOnLibraryErrors();

   //输入服务器的IP地址
    PromptPopup ("Server Name?",
                 "Type the name of the machine running the sample server project\n(example: abc.xyz.com)",
                 serverName, 255);

   //输入服务器的端口号
    PromptPopup ("Port Number?",
                 "Type the port number that was set when starting the sample server project\n(example: 10000)",
                 portNumString, 31);
    portNumber = atoi(portNumString);

    //加载用户界面
    panelHandle = LoadPanel(0, "sample8clnt.uir", PANEL);
    //SetPanelAttribute (panelHandle, ATTR_TITLE, "TCP Client");
    DisplayPanel(panelHandle);
	 //显示服务器的IP地址
	SetCtrlVal(panelHandle, PANEL_SERVERIP, serverName);
	//显示服务器的端口号
	SetCtrlVal(panelHandle, PANEL_SERVERPORT, portNumString);

   //与服务器连接
    SetWaitCursor (1);
    if (ConnectToTCPServer (&handle, portNumber, serverName, ClientCallback,
                            NULL, 5000)<0) {
        MessagePopup("TCP 用户", "与服务器连接失败 !");
    } else {
        covHandle = handle;
        SetWaitCursor (0);
        //连接通讯指示灯变亮
        SetCtrlVal(panelHandle, PANEL_CONNECTED, 1);

        SetActiveCtrl(panelHandle, PANEL_STRING);
        //显示用户界面
        DisplayPanel (panelHandle);
	    RunUserInterface ();
	    //与服务器断开
        DisconnectFromTCPServer(covHandle);
        DiscardPanel(panelHandle);
    }

    return 0;
}

//发送数据

int CVICALLBACK TxScrCallback(int panelHandle, int controlID, int event, void *callbackData,
            int eventData1, int eventData2)
{
    int     numLines;
    char    buffer[512];

    switch(event) {
        case EVENT_COMMIT:
            //SetCtrlAttribute (panelHandle, controlID, ATTR_CALLBACK_DATA, (void *)0);
            //从发送区内读取数据
            GetCtrlVal (panelHandle, PANEL_STRING, buffer);
            strcat (buffer, "\n");
            SetCtrlVal (panelHandle, PANEL_kTransmit, buffer);
            //清空 STRING控件
            SetCtrlVal (panelHandle, PANEL_STRING, "");
            if(ClientTCPWrite (covHandle, buffer, strlen(buffer)+1, 1000)<0) {
                MessagePopup ("TCP 服务器", "TCP 写错误!");
                //连接通讯指示灯变暗 
                SetCtrlVal(panelHandle, PANEL_CONNECTED, 0);
                //quit = 1;
            }
        default:
            break;
    }
    return 0;
}



//用户返回函数
int CVICALLBACK ClientCallback(unsigned handle, int event, int error, void *callbackData) {
    char        buffer[256];
    int         dataSize=256, i;

    covHandle = handle;
    switch (event) {
        //接收服务器发送的数据
        case TCP_DATAREADY:
            //读取数据
            if((dataSize = ClientTCPRead(covHandle, buffer, dataSize, 1000))<0) {
                MessagePopup("TCP 用户", "TCP 读错误!");
                SetCtrlVal(panelHandle, PANEL_CONNECTED, 0);
                //quit = 1;
                break;
            }
            SetCtrlVal(panelHandle, PANEL_kReceive, buffer);
            break;
        //断开连接
        case TCP_DISCONNECT:
           //显示断开连接信息
            MessagePopup("TCP 用户", "与服务器连接中断!");
            //连接通讯指示灯变暗
            SetCtrlVal(panelHandle, PANEL_CONNECTED, 0);
            //quit = 1;
            break;
    }
    return 0;
}

//程序退出
int CVICALLBACK Exit (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_COMMIT:
			QuitUserInterface (0);
			break;
		}
	return 0;
}

⌨️ 快捷键说明

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