📄 multitcpserver.c
字号:
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/signal.h>
#include<sys/socket.h>
#include<sys/time.h>
#include<sys/resource.h>
#include<sys/wait.h>
#include<sys/errno.h>
#include<netinet/in.h>
#define DEFAULT_PORT 2345
#define MAX_QLEN 10
#define BUFSIZE 1024
void echoService(int sock);
int main(int argc,char* argv[])
{
int m_sock,s_sock;
struct sockaddr_in server;
struct sockaddr_in client;
int port;
int qlen;
int rval,length;
switch(argc)
{
case 1:
port=DEFUAULT_PORT;
break;
case 2:
port=atoi(argv[1]);
break;
default:
perror("usage:multiTcpServer[port]\n");
exit(1);
}
qlen=MAX_QLEN;
m_sock=socket(PF_INET,SOCK_STREAM,0);
if(m_sock<0)
{
perror("can't create socket\n");
exit(1);
}
server.sin_family=AF_INET;
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=htons(port);
rval=bind(m_sock,(struct sockaddr *)&server,sizeof(server));
if(rval<0)
{
perror("binding error\n");
exit(1);
}
rval=listen(m_sock,qlen);
if(rval<0)
{
perror("listening error\n");
exit(1);
}
do
{
length=sizeof(struct sockaddr_in);
s_sock=accept(m_sock,(struct sockaddr*)&client,&length);
if(s_sock<0)
{
perror("accepting error\n");
exit(0);
}
switch(fork())
{
case -1:
perror("fork error!\n");
exit(1);
case 0:
close(m_sock);
echoService(s_sock);
exit(0);
default:
close(s_sock);
}
}
while(1);
}
void echoService(int sock)
{
char buf[BUFSIZE];
int rval;
do
{
bzero(buf,sizeof(buf));
rval= read(sock,buf,sizeof(buf));
if(rval<0)
{
perror("reading error\n");
exit(1);
}
if(strcmp(buf,"END")==0)
return;
else
{
rval=write(sock,buf,strlen(buf));
if(rval<0)
{
perror("writing error\n");
exit(1);
}
}
}
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -