📄 tcpserver.c
字号:
/*****************************************************************************************
* 文件名: tcpServer.c
* 作者: liuxq 版本: 1.0 日期: 2006-10-25
* 文件描述: 本文件用于TCP网络测试时服务器端接收和发送任务的建立
* 版本: 1.0
* 函数列表:
* STATUS tcpServer();
* void serverWrite();
* void serverRead();
*
* 修改历史:
* <作者> <时间> <版本 > <描述>
*****************************************************************************************/
#include "vxWorks.h"
#include "sockLib.h"
#include "inetLib.h"
#include "taskLib.h"
#include "stdioLib.h"
#include "strLib.h"
#include "ioLib.h"
#include "fioLib.h"
#define SERVER_PORT_NUM 5001 /* server's port number for bind() */
#define SERVER_MAX_CONNECTIONS 4 /* max clients connected at a time */
void serverWrite();
void serverRead();
int newFd; /* socket descriptor from accept */
/*
* 函数名: STATUS tcpServer (void)
* 函数描述: 创建服务器端套接字后等待客户端连接,连接后建立发送和接收两个任务
* 调用:
* 被调用:
* 访问记录:
* 修改记录:
* 输入:
* 输出:
* 返回:
* 其它:
*/
STATUS tcpServer (void)
{
struct sockaddr_in serverAddr; /* server's socket address */
struct sockaddr_in clientAddr; /* client's socket address */
int sockAddrSize; /* size of socket address structure */
int sFd; /* socket file descriptor */
int ix = 0; /* counter for work task names */
char workName[16]; /* name of work task */
sockAddrSize = sizeof (struct sockaddr_in);
bzero ((char *) &serverAddr, sockAddrSize);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons (SERVER_PORT_NUM);
serverAddr.sin_addr.s_addr = htonl (INADDR_ANY);
if ((sFd = socket (AF_INET, SOCK_STREAM, 0)) == ERROR)
{
perror ("socket");
return (ERROR);
}
if (bind (sFd, (struct sockaddr *) &serverAddr, sockAddrSize) == ERROR)
{
perror ("bind");
close (sFd);
return (ERROR);
}
if (listen (sFd, SERVER_MAX_CONNECTIONS) == ERROR)
{
perror ("listen");
close (sFd);
return (ERROR);
}
FOREVER
{
if ((newFd = accept (sFd, (struct sockaddr *) &clientAddr,
&sockAddrSize)) == ERROR)
{
perror ("accept");
close (sFd);
return (ERROR);
}
else
{
if ((taskSpawn("tServerWrite", 100, 0, 4096, (FUNCPTR)serverWrite, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) == ERROR)
{
logMsg("taskSpawn tServerWrite failed!\n", 0, 0, 0, 0, 0, 0);
}
if ((taskSpawn("tServerRead", 100, 0, 4096, (FUNCPTR)serverRead, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) == ERROR)
{
logMsg("taskSpawn tServerRead failed!\n", 0, 0, 0, 0, 0, 0);
}
}
}
}
/*
* 函数名: void serverWrite()
* 函数描述: 服务器发送任务函数
* 调用: write(),close(),logMsg()
* 被调用: tcpServer();
* 访问记录:
* 修改记录:
* 输入: 无
* 输出: 无
* 返回:
* 其它:
*/
void serverWrite()
{
char str[100]="to client";
while(1)
{
if (write (newFd,str,sizeof(str)) == ERROR)
{
perror ("write");
close (newFd);
}
else
{
logMsg("toClient=%s\n",str,0,0,0,0,0);
}
taskDelay(60);
}
}
void serverRead()
{
char str[100];
while(1)
{
if (read (newFd, str, sizeof(str)) < 0)
{
perror ("read");
close (newFd);
}
else
{
printf ("from Client:%s\n", str);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -