📄 server.c
字号:
/* Examples for Linux Network Programming----server.c */
#ifndef unix
#define WIN32
#include <windows.h>
#include <winsock.h>
#else
#define closesocket close
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#endif
#include <stdio.h>
#include <string.h>
#define PROTORORT 5193 /* default protocol port number */
#define QLEN 6 /* size of request queue*/
int visits = 0; /* counts client connections */
/*-----------------------------------------------------------
*Program: server
*Purpose: allocate a socket, and then repeatedly execute the following:
* (1)wait for the next connection from a client
(2)send a short message to the client
(3)close the connection
(4)go back to step(1)
*Syntax: server[port]
* port - protocol port number to use
*
*Notes: the port argument is optional. If no port is specified,the
* server uses the default given by PROTOPORT.
*-----------------------------------------------------------
*/
main(argc,argv)
int argc;
char *argv[];
{
struct hostent *ptrh; /*pointer to a host table entry*/
struct protoent *ptrp; /*pointer to a protocol table entry*/
struct sockaddr_in sad; /*structure to hold server's address*/
struct sockaddr_in cad; /*structure to hold client's address*/
int sd,sd2; /*socket descriptor*/
int port; /*protocol prot number*/
int alen; /*lenth of address*/
char buf[1000]; /*buffer for data from the server */
#ifdef WIN32
WSADATA wsaData;
WSAStartup(0x0101, &wsaData);
#endif
memset((char *)&sad,0,sizeof(sad)); /*clear sockaddr structure*/
sad.sin_family = AF_INET; /*set family to Internet */
sad.sin_addr.s_addr = INADDR_ANY; /*set the local IP address */
/*Check command- line argument for portocol port and extract */
/*port number if one is specifie. Otherwise, use the default*/
/*port value given by constant PROTOPORT */
if(argc >1){ /*if argument specified*/
port = atoi(argv[1]); /*convert to binary */
}else{
port = PROTOPORT; /*use default port number*/
}
if(port>0) /*test for illegal value*/
sad.sin_port = htons(u_short)port);
/*print error message and exit */
else{
fprintf(stderr,"bad port number %s\n",argv[1]);
exit(1);
}
/*Map TCP transport protocol name to protocol number. */
if( ((int)(ptrp = getprotobyname("tcp"))) ==0{
fprintf(stderr,"cannot map \ "tcp\" to protocol number);
exit(1);
}
/*Create a socket. */
sd=socket(PF_INET,SOCK_STREAM,ptrp->p_proto);
if(sd<0){
fprintf(stderr,"socket creation failed\n");
exit(1);
}
/*Bind a local address to the socket */
if(bind(sd,(struct sockaddr *)&sad,sizeof(sad))<0){
fprintf(stderr,"bind failed\n");
exit(1);
}
/*Specify size of request queue */
if(listen(sd, QLEN)<0){
fprintf(stderr, "listen failed\n"):
exit(1);
}
/* Main server loop - accept and handle requests */
while(1){
alen = sizeof(cad);
if((sd2=accept(sd,(struct sockaddr *)&cad,&alen))<0){
fprintf(stderr,"accept failed\n"):
exit(1);
}
visits++;
sprintf(buf,"This server has been contacted %d time%s\n",visits,visits==1?".":s.");
send(sd2,buf,strlen(buf),0);
closesocket(sd2);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -