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

📄 tcpclient.c

📁 2410/vxworks/tornado下的基本实验包括 serial,ramdrv,interrupt,multi-tasking,FTP,TCP,UDP
💻 C
字号:
/*tcpClient.c - TCP 客户端程序*/

/* includes */

#include "vxWorks.h"
#include "sockLib.h"
#include "inetLib.h"
#include "stdioLib.h"
#include "strLib.h"
#include "hostLib.h"
#include "ioLib.h"
#include "tcpExample.h"

/*********************************************************************
*
*tcpClient -- 通过TCP套接字向服务器发送信息
*
*本程序通过TCP套接字连接到TCP服务器并发送用户提供的信息给服务器.
*
*参数: serverName:服务器名或IP地址
*
*可选的,还可以请求服务器返回应答信息
*
*                   
*返回值OK或ERROR
*
***********************************************************************/
STATUS  tcpClient(char* serverName)
{
	struct REQUEST myRequest;                  /*发送到服务器的请求*/
	struct sockaddr_in serverAddr;             /*服务器套接字地址*/
	char reply;                                         /*如果为TRUE,服务器返回应答信息*/
	int    sockAddrSize;                              /*套接字地址数据结构大小*/
	int    sFd;                                              /*套接字文件描述符*/
	int    mLen;                                           /*信息长度*/
	char replyBuf[REPLY_MSG_SIZE];          /*应答信息缓存区*/

    /*生成客户端套接字*/

	if((sFd = socket(AF_INET,SOCK_STREAM,0)) == ERROR)               /*SOCK_STREAM表明生成流式套接字*/	
		{
			perror("socket\n");
			return(ERROR);
		}

	/*无绑定 - 本地端口地址为动态*/

	/*生成服务器套接字地址*/

	sockAddrSize = sizeof(struct sockaddr_in);
	bzero((char*)&serverAddr,sockAddrSize);
	serverAddr.sin_len = (u_char)sockAddrSize;              
	serverAddr.sin_family = AF_INET;								/*服务器为AF_INET地址域*/
	serverAddr.sin_port = htons(SERVER_PORT_NUM);     /*服务器端口号*/

	/*服务器IP地址*/
	
	if(((serverAddr.sin_addr.s_addr = inet_addr(serverName)) == ERROR) &&
		((serverAddr.sin_addr.s_addr = hostGetByName(serverName)) == ERROR))
		{
			perror("unknown server name\n");
			close(sFd);
			return(ERROR);
		}
	
	/*连接到服务器*/
	if(connect(sFd, (struct sockaddr*)&serverAddr, sockAddrSize) == ERROR)
		{
			perror("connect \n");
			close(sFd);
			return(ERROR);
		}

	/*产生请求,提示用户输入信息*/

	printf("Message to send : \n");
	mLen= read(STD_IN,myRequest.message,REQUEST_MSG_SIZE);
	myRequest.msgLen = mLen;
	myRequest.message[mLen - 1] = '\0';
   
	printf("Would you like a reply(Y or N) : \n");
	read(STD_IN,&reply,1);
	switch(reply)
		{
			case 'y':
			case 'Y':
				myRequest.reply= TRUE;
				break;
			default:
				myRequest.reply= FALSE;
				break;
		}

	/*发送请求到服务器*/
	if(write(sFd, (char *)&myRequest, sizeof(myRequest)) == ERROR)
		{
			perror("write \n");
			close(sFd);
			return(ERROR);
		}

	/*如果选择了返回应答信息, 则读取并显示返回信息*/
	if(myRequest.reply)
		{
			if(read(sFd, replyBuf, REPLY_MSG_SIZE) < 0)
				{
					perror("read \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 + -