📄 tcpserver.c
字号:
/* tcpServer.c - TCP server example */
#include "vxWorks.h"
#include "sockLib.h"
#include "inetLib.h"
#include "taskLib.h"
#include "stdioLib.h"
#include "strLib.h"
#include "ioLib.h"
#include "fioLib.h"
#include "tcp.h"
void tcpServerWorkTask (int sFd, char * address, u_short port);
STATUS tcpServer (void);
STATUS test()
{
/*将tcpServer任务放置于后台执行*/
taskSpawn("tcpServer",110,0,10000,(FUNCPTR)tcpServer,0,0,0,0,0,0,0,0,0,0);
return OK;
}
STATUS tcpServer (void)
{
struct sockaddr_in serverAddr;
struct sockaddr_in clientAddr;
int sockAddrSize;
int sFd;
int newFd; /* socket descriptor from accept */
int ix = 0; /* counter for work task names */
char workName[16]; /* 建立的任务名称 */
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);
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 error \n");
close (sFd);
return (ERROR);
}
if (listen (sFd, SERVER_MAX_CONNECTIONS) == ERROR)
{
perror ("listen establish error \n");
close (sFd);
return (ERROR);
}/*建立失败返回错误信息*/
FOREVER
{
if ((newFd = accept (sFd, (struct sockaddr *) &clientAddr,
&sockAddrSize)) == ERROR)
{ /*判断是否有信息传输,若建立失败,返回错误信息*/
perror ("accept error \n");
close (sFd);
return (ERROR);
}
printf("sFd = %d; newFd = %d \n",sFd,newFd);
sprintf (workName, "tTcpWork%d", ix++);
if (taskSpawn(workName, SERVER_WORK_PRIORITY, 0, SERVER_STACK_SIZE,
(FUNCPTR) tcpServerWorkTask, newFd,
(int) inet_ntoa (clientAddr.sin_addr), ntohs (clientAddr.sin_port),
0, 0, 0, 0, 0, 0, 0) == ERROR)
{
/* 调用函数,发起一个新的任务,错误返回错误信息*/
perror ("taskSpawn");
close (newFd);
}
}
}
void tcpServerWorkTask /*被调用的函数*/
/*在建立的循环中,如果套节字的字长大于0,读取数据,反之退出*/
(
int sFd,
char * address,
u_short port
)
{
struct request clientRequest;
int nRead;
static char replyMsg[] = "Server received your message";
while ((nRead = fioRead (sFd, (char *) &clientRequest,
sizeof (clientRequest))) > 0)
{
printf ("MESSAGE FROM CLIENT (Internet Address %s, port %d):\n%s\n",
address, port, clientRequest.message);
free (address);
if (clientRequest.reply)
if (write (sFd, replyMsg, sizeof (replyMsg)) == ERROR)
perror ("write");
}
if (nRead == ERROR)
perror ("read");
close (sFd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -