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 + -
显示快捷键?