server.c

来自「vxworks下的一个网络通信的例子」· C语言 代码 · 共 114 行

C
114
字号
#include "vxWorks.h"
#include "fioLib.h"
#include "stdio.h"
#include "unistd.h"
#include "string.h"
#include "usrLib.h"
#include "errnoLib.h"
#include "hostLib.h"
#include "sockLib.h"
#include "socket.h"
#include "inetLib.h"
#include "in.h"
#include "assert.h"

#define SERVER_NUM 1100
int server (void)
    {    int sock, newsock;	/* socket fd's */
    struct sockaddr_in	serverAddr;	/* server's address */    struct sockaddr_in 	clientAddr;	/* client's address */    int			client_len;	/* length of clientAddr */    char		buffer[30];
    char    sendstring[]="server send reciver ack!";
    extern int		errno;		/* for UNIX error referencing */    /* Zero out the sock_addr structures.     * This MUST be done before the socket calls.     */    bzero ((char *)&serverAddr, sizeof (serverAddr));
    bzero ((char *)&clientAddr, sizeof (clientAddr));
    /* Open the socket.     * Use ARPA Internet address format and stream sockets.     * Format described in "socket.h".     */    if(sock = socket (AF_INET, SOCK_STREAM, 0)<0)
    	{
    		printf ("socket create failed, errno = %d\n", errno);
    	}

    /* Set up our internet address, and bind it so the client can connect. */
    serverAddr.sin_family = AF_INET;    serverAddr.sin_port = htons(SERVER_NUM);
    serverAddr.sin_addr.s_addr=htons(INADDR_ANY);
    printf ("\nBinding SERVER\n", serverAddr.sin_port);    if (bind (sock, (struct sockaddr *)&serverAddr, sizeof (serverAddr))							== ERROR)
	{	printf ("bind failed, errno = %d\n", errno);	close (sock);	exit (1);	}    /* Listen, for the client to connect to us. */    printf ("Listening to client\n");
	
    if (listen (sock, 2) == ERROR)
	{	printf ("listen failed\n");	close (sock);	exit (1);	}    /* The client has connected.  Accept, and receive chars */    printf ("Accepting CLIENT\n");    client_len = sizeof (clientAddr);    newsock = accept (sock, (struct sockaddr *)&clientAddr, &client_len);
    if (newsock == ERROR)
	{	printf ("accept failed\n");	close (sock);	exit (1);	}
    printf ("CLIENT: port = %d: family = %d: addr = %lx:\n",ntohs(clientAddr.sin_port), clientAddr.sin_family,ntohl(clientAddr.sin_addr.s_addr));
    /* repeatedly recieve characters from client and put on stdout */    while(1)
	{	if (recv(newsock, buffer,sizeof(buffer), 0) == ERROR)
	    {	    /* client has disappeared */	    break;	    }
	printf("from client:%s\n",buffer);

	if (send(newsock, sendstring,strlen(sendstring), 0) == ERROR)
	    {	    /* client has disappeared */	    break;	    }
	}    /* close the socket from the UNIX side */    close (sock);    close (newsock);
    printf ("\n...goodbye\n");
	return 1;
    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?