📄 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 "tcpExample.h"
VOID tcpServerWorkTask (int sFd, char * address, u_short port);
VOID tcpServeraddTask();
STATUS tcpServer (void)
{
if(taskSpawn("Server", SERVER_WORK_PRIORITY, 0, SERVER_STACK_SIZE,
(FUNCPTR) tcpServeraddTask, 0,0,0,0,0, 0, 0, 0, 0, 0) == ERROR)
{
/* 调用函数,发起一个新的任务,错误返回错误信息*/
printf("Server task created error!\n");
}
return (OK);
}
VOID tcpServeraddTask()
{
struct sockaddr_in clientAddr;
int ix = 0; /* counter for work task names */
char workName[16]; /* 建立的任务名称 */
int sockAddrSize;
int newFd;
struct sockaddr_in serverAddr;
int sFd;
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");
printf("error in Server Bind") ;
close (sFd);
return (ERROR);
}
if (listen (sFd, SERVER_MAX_CONNECTIONS) == ERROR)
{
perror ("listen");
close (sFd);
return (ERROR);
}/*建立失败返回错误信息*/
sockAddrSize = sizeof (struct sockaddr_in);
FOREVER
{
if ((newFd = accept (sFd, (struct sockaddr *) &clientAddr,
&sockAddrSize)) == ERROR)
{ /*判断是否有信息传输,若建立失败,返回错误信息*/
perror ("accept");
close (sFd);
return (ERROR);
}
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;
char replyMsg[] = " I am Server...I have received your message! Replay ....";
int mlen;
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 + -