初学LinuxTCP服务端
来源:互联网 发布:2k17加内特捏脸数据 编辑:程序博客网 时间:2024/04/23 21:28
#include <stdio.h>#include <stdlib.h>#include <strings.h>#include <sys/types.h>#include <sys/socket.h>#include <memory.h>#include <unistd.h>#include <netinet/in.h>#include <arpa/inet.h>#include <signal.h>#define PORT 11910 //定义通信端口#define BACKLOG 3 //定义侦听队列长度#define buflen 1024int ss,sc;int main(int argc,char *argv[]){int err;struct sockaddr_in server_addr; //存储服务器端socket地址结构struct sockaddr_in client_addr; //存储客户端 socket地址结构ss = socket(AF_INET,SOCK_STREAM,0); //建立一个序列化的,可靠的,双向连接的的字节流memset(&server_addr,0,sizeof(server_addr));server_addr.sin_family = AF_INET; //协议族server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //本地地址server_addr.sin_port = htons(PORT);int opt=1;setsockopt(ss,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(&opt));//自动释放端口err = bind(ss,(struct sockaddr *)&server_addr,sizeof(sockaddr));if(err<0){printf("server : bind error\n");return -1;}err = listen(ss,BACKLOG); //设置监听的队列大小if(err < 0){printf("server : listen error\n");return -1;}for(;;){socklen_t addrlen = sizeof(client_addr);sc = accept(ss,(struct sockaddr *)&client_addr,&addrlen); //注,此处为了获取返回值使用 指针做参数if(sc < 0) //出错{continue; //结束此次循环}else{printf("connected\n");}//char wbuffer[buflen];char rbuffer[buflen];for(;;){close(ss);//等待读int size;memset(rbuffer,0,buflen);for(size = 0;size == 0 ;size = read(sc,rbuffer,buflen));printf("%s\n",rbuffer);write(sc,rbuffer,strlen(rbuffer)+1);if(strcmp(rbuffer,"quit") == 0) {close(sc); //成功返回0,失败返回-1 return 0; }}}}
阅读全文
0 0
- 初学LinuxTCP服务端
- 嵌入式linuxTCP/IP路由器
- linuxTCP优化提高性能
- GT-Grid初学服务端数据加载
- 查看linuxTCP和UDP监听状态
- LinuxTCP shutdown和close系统调用
- Thrift初学--服务端构造(阻塞、非阻塞方式两种服务端)
- 服务端
- 服务端
- 服务端
- 初学...
- 初学
- 初学
- 初学
- 初学
- 初学
- 初学
- 初学
- 算法与数据结构学习之——大数字四则运算
- Codeforces Round #438 (Div. 1 + Div. 2 combined) ABCDF
- JS 中的prototype
- Android Gradle 多版本多APK打包,修改生成APK名称 标签: androidgradle多版本打包 2017-04-01 15:16 1113人阅读 评论(0) 收藏 举报 分类:
- python的字符串连接
- 初学LinuxTCP服务端
- scala 泛型基础之jdk1.5引入的泛型 generics (一)
- 关于python3.X的cpickle
- HDU 4778 状压DP+博弈
- 双向链表
- openwrt ssh登陆第一次出来的字符修改
- 几个常见的链表面试题<一>
- 在多重继承里面出现的错误
- Crossing(一维单点更新,区间查询)