📄 tcpclient.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 + -