/*
NAME
socket - create an endpoint for communication
SYNOPSIS
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
RETURN VALUE
On success, a file descriptor for the new socket is returned. On
error, -1 is returned, and errno is set appropriately.
NAME
bind - bind a name to a socket
SYNOPSIS
#include <sys/types.h>
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
RETURN VALUE
On success, zero is returned. On error, -1 is returned, and errno is
set appropriately.
NAME
listen - listen for connections on a socket
SYNOPSIS
#include <sys/types.h>
#include <sys/socket.h>
int listen(int sockfd, int backlog);
RETURN VALUE
On success, zero is returned. On error, -1 is returned, and errno is
set appropriately.
vim tcpserver.c
gcc -o tcpserver tcpserver.c
./tcpserver
netstat -ap|grep tcpserver
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int mian()
{
int skfd;//socket文件描述符 socket file description
socklen_t addrlen;
int ret;
char buff[20];
struct sockaddr_in serveraddr,clientaddr;
skfd = socket(AF_INEF,SOCK_STREAM,0);
if(skfd<0)
{
perror("socket");
return -1;
}
//填充网络类型,端口号,ip地址
serveraddr.sin_family = AF_INEF;//填充网络地址类型 IPv4
serveraddr.sin_port = htons(55555);//注意 端口号是short htons是字节序转换
serveraddr.sin_addr.s_addr = 0;//inet_addr(""0,0,0,0);写0表示绑定任意地址
addrlen = sizeof(serveraddr);
ret = bind(skfd,(struct sockaddr *)&serveraddr,addrlen);
if(ret<0)
{
perror("bind");
return -1;
}
ret = listen(skfd,5);//5表示可以同时连接客户端的数量
if(ret<0)
{
perror("listen");
return -1;
}
while(1)
{
int clientfd;//client文件描述符 client file description
clientfd = accept(skfd,(struct sockaddr *)&clientaddr,&addrlen);
if(clientfd<0)
{
perror("accept");
return -1;
}
printf("ret=%d,ip:%s,port:%d\n",clientfd,inet_ntao(clientaddr.sin_addr,ntohs(clientaddr.sin_port)));
int recvlen=0;
if(clientfd>0)
{
while(1)
{
memset(buff,0,MSGLEN);
recvlen = recv(clientfd,buff,10,0);
if(recvlen==0)
{
printf("connect:%d closeed\n",clientfd);
close(clientfd);
break;
}
printf("recvlen:%d,%s\n",recvlen,buff);
}
}
close(skfd);
}
}
tcpserver.c
原创
©著作权归作者所有:来自51CTO博客作者果果小师弟的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
从C 向C++13——模板
从C向C++13——模板
类模板 函数模板 数组 -
【muduo】net篇---TcpServer
TcpServer在创建的过程中,首先new出来自己的核心组件(Acceptor,loop,connectionMap,threadPool)之后TcpSer
muduo tcpserver #include 线程池 回调函数 -
缩略muduo库(9):TcpServer
准备讲解了,这里就直接放代码吧。
c++ #include 服务器 #pragma 封装 -
centos 修改文件 用户及用户组
一、权限概述1.Linux中有读、写、执行权限 读权限: 对于文件夹来说,读权限影响用户是否能够列出目录结构 对于文件来收,读权限影响用户是否可以查看文件内容 写权限: 对文件夹来说,写权限影响用户是否可以在文件夹下“创建/删除/复制到”文档 对文件来说,写权限影响用户是否可以编辑文件内容 执行权限: 一般都是对于文件来说,特别是脚本文件。 3.
centos 修改文件 用户及用户组 linux修改文件夹名称 linux修改文件夹权限 linux更改文件夹权限 linux权限